会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132647个问题

import java.sql.Connection;
import java.sql.Statement;

/**
 * Statement对象的使用
 */
public class StatementTest {
    /**
    * 添加用户
    */
    public void insetUsers(String username,int userage){
        Connection connection = null;
        Statement statement = null;
        try{
            //获取Connection对象。
            connection = JdbcUtils.getConnection();
            //获取Statement对象
            statement = connection.createStatement();
            //定义需要执行的SQL语句
            String sql = "inset into users values(default,'"+username+"',"+userage+")";
            //执行SQL,返回boolean值,如果sql有结果集返回,那么返回值为true,如果没有结果集返回,则返回false。
           boolean execute=statement.execute(sql);
            System.out.println(execute);
        }
        catch(Exception e){
            e.printStackTrace();
        }
        finally {
            JdbcUtils.closeResource(statement,connection);
        }
    }

}

import java.sql.Statement;

public class Test {
    public static void main(String[] args) {
        StatementTest st = new StatementTest() ;
        st.insetUsers("Oldlu",28);
    }
}

运行结果:

java.sql.SQLException: The url cannot be null

at java.sql.DriverManager.getConnection(DriverManager.java:649)

at java.sql.DriverManager.getConnection(DriverManager.java:247)

at com.Han.JdbcUtils.getConnection(JdbcUtils.java:43)

at com.Han.StatementTest.insetUsers(StatementTest.java:18)

at com.Han.Test.main(Test.java:8)

java.lang.NullPointerException

at com.Han.StatementTest.insetUsers(StatementTest.java:20)

at com.Han.Test.main(Test.java:8)

Exception in thread "main" java.lang.NullPointerException

at com.Han.JdbcUtils.closeStatement(JdbcUtils.java:76)

at com.Han.JdbcUtils.closeResource(JdbcUtils.java:92)

at com.Han.StatementTest.insetUsers(StatementTest.java:31)

at com.Han.Test.main(Test.java:8)


Process finished with exit code 1


JAVA 全系列/第三阶段:数据库编程/JDBC技术 211楼
JAVA 全系列/第三阶段:数据库编程/JDBC技术 213楼
JAVA 全系列/第三阶段:数据库编程/JDBC技术 214楼


jdbcTest2 {
    InputStream ;

    main(String[] args) IOException, ClassNotFoundException, SQLException {
        Properties prop = Properties();
        InputStream is = jdbcTest2..getClassLoader().getResourceAsStream();
        prop.load(is);
        String url = prop.getProperty();
        String name = prop.getProperty();
        String pwd = prop.getProperty();
        String drivername = prop.getProperty();
        Class.(drivername);
        Connection connection = DriverManager.(url,name,pwd);
        System..println(connection);
    }

}

一直报错,请问这个是什么情况啊?

"C:\Program Files\Java\jdk1.8.0_301\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.2.2\lib\idea_rt.jar=58786:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.2.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_301\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\rt.jar;C:\Users\zhangsiyu\IdeaProjects\mycode001\out\production\jdbcdemo;C:\Users\zhangsiyu\IdeaProjects\mycode001\jdbcdemo\lib\mysql-connector-java-5.1.48.jar" com.itbaizhan.jdbcTest2
Sun Oct 16 20:34:52 CST 2022 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 875 milliseconds ago.  The last packet sent successfully to the server was 858 milliseconds ago.
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
	at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:990)
	at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:201)
	at com.mysql.jdbc.MysqlIO.negotiateSSLConnection(MysqlIO.java:4869)
	at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1656)
	at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1217)
	at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2189)
	at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2220)
	at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2015)
	at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:768)
	at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
	at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:385)
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:323)
	at java.sql.DriverManager.getConnection(DriverManager.java:664)
	at java.sql.DriverManager.getConnection(DriverManager.java:247)
	at com.itbaizhan.jdbcTest2.main(jdbcTest2.java:34)
Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
	at sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:171)
	at sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:101)
	at sun.security.ssl.TransportContext.kickstart(TransportContext.java:238)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:394)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:373)
	at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:186)
	... 18 more

Process finished with exit code 1


JAVA 全系列/第三阶段:数据库编程/JDBC技术 215楼
JAVA 全系列/第三阶段:数据库编程/JDBC技术 216楼
JAVA 全系列/第三阶段:数据库编程/数据库范式与表关系 217楼
JAVA 全系列/第三阶段:数据库编程/MySQL数据库 219楼

package com.itbaizhan;

import java.sql.Connection;
import java.sql.Statement;

/**
 * Statement对象的使用
 */
public class StatementTest {

    /**
     * 添加用户
     */
    public void insertUsers(String username,int userage){
        Connection connection = null;
        Statement statement = null;
        try{
            //获取Connection对象
            connection = JdbcUtils.getConnection();
            //获取Statement对象
            statement = connection.createStatement();
            //定义需要执行的SQL语句
            String sql = "insert into users values(default,'"+username+"',"+userage+")";
            //执行SQL,返回boolean值,如果SQL有结果集返回,那么返回值为true,如果没有结果集返回,则返回false.
            boolean execute = statement.execute(sql);
            System.out.println(execute);
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            JdbcUtils.closeResource(statement,connection);
        }
    }
}



package com.itbaizhan;

import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

/**
 * 工具类
 */
public class JdbcUtils {
    private static String url;
    private static String name;
    private static String pwd;

    static {
        try {
            //实例化Properties对象
            Properties prop = new Properties();
            //获取读取properties文件的字节输入流对象
            InputStream is = JdbcTest2.class.getClassLoader().getResourceAsStream("jdbc.properties");
            //读取properties文件并解析
            prop.load(is);
            //获取连接数据库的url
            url = prop.getProperty("url");
            //获取连接数据库的用户名
            name = prop.getProperty("name");
            //获取连接数据库的pwd
            pwd = prop.getProperty("pwd");
            //获取数据库驱动全名
            String drivername = prop.getProperty("driver");
            //加载并注册驱动
            Class.forName(drivername);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

        //获取数据库连接对象
        public static Connection getConnection(){
            Connection connection = null;
            try{
                connection = DriverManager.getConnection(url,name,pwd);
            }catch(SQLException e){
                e.printStackTrace();
            }
            return connection;
        }

        //关闭连接对象
        public static void closeConnection(Connection connection){
            try{
                connection.close();
            }catch(SQLException e){
                e.printStackTrace();
            }
        }

        //提交事务
        public static void commit(Connection connection){
             try{
                 connection.commit();
             }catch(SQLException e){
                 e.printStackTrace();
             }
        }

        //事务回滚
        public static void rollback(Connection connection){
            try{
                connection.rollback();
            }catch(SQLException e){
                e.printStackTrace();
            }
        }

        //关闭Statement对象
         public static void closeStatement(Statement statement){
             try{
                 statement.close();
             }catch(SQLException e){
                 e.printStackTrace();
             }
        }

        //关闭ResultSet
        public static void closeResulSet(ResultSet resultSet){
            try{
                resultSet.close();
            }catch(SQLException e){
                e.printStackTrace();
            }
        }

        //DML操作时关闭资源
        public static void closeResource(Statement statement,Connection connection){
            //先关闭Statement对象
            closeStatement(statement);
            //再关闭Connection对象
            closeConnection(connection);
        }

        //查询时关闭资源
        public static void closeResource(ResultSet resultSet,Statement statement,Connection connection){
            //先关闭ResultSet
            closeResulSet(resultSet);
            //再关闭Statement对象
            closeStatement(statement);
            //最后关闭Connection对象
            closeConnection(connection);
        }
    }
    
    
    package com.itbaizhan;

public class Test {
    public static void main(String[] args) {
        StatementTest statementTest = new StatementTest();
        statementTest.insertUsers("Miao",19);
    }
}


image.png

image.png


Statement_添加数据时报错,实在找不到原因






JAVA 全系列/第三阶段:数据库编程/JDBC技术 221楼

jdbcdemo.zip


运行添加后一直报错,我直接把代码复制上去也不行,测试数据库连接是正常的

image.png

image.png


java.lang.NullPointerException: Cannot invoke "java.sql.Connection.createStatement()" because "connection" is null

at com.itbaizhan.StatementTest.insertUsers(StatementTest.java:22)

at com.itbaizhan.Test.main(Test.java:6)

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.sql.Statement.close()" because "statement" is null

at com.itbaizhan.JdbcUtils.closeStatement(JdbcUtils.java:64)

at com.itbaizhan.JdbcUtils.closeResource(JdbcUtils.java:78)

at com.itbaizhan.StatementTest.insertUsers(StatementTest.java:31)

at com.itbaizhan.Test.main(Test.java:6)


Process finished with exit code 1


JAVA 全系列/第三阶段:数据库编程/JDBC技术 222楼

我这边statement的部份一直报错是我少引用了什么吗?

public static void closeStatement(Statement statement){
    try {
        statement.close();
    } catch (SQLException throwables) {
        throwables.printStackTrace();
    }
}



package com.itbaizhan;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * Jdbc tool class
 */
public class JdbcUtils {
    private static String url;
    private static String name;
    private static String pwd;
    static {
        try {
            Properties prop = new Properties();
            InputStream is = JdbTest2.class.getClassLoader().getResourceAsStream("jdbc.properties");
            prop.load(is);

            url = prop.getProperty("url");
            name = prop.getProperty("username");
            pwd = prop.getProperty("pwd");
            String drivername = prop.getProperty("driver");

            Class.forName(drivername);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    //acquire database connection object
    public static Connection getConnection(){
        Connection connection = null;
        try {
            DriverManager.getConnection(url,name,pwd);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
    public static void closeConnection(Connection connection){
        try {
            connection.close();
        }catch (SQLException throwables){
            throwables.printStackTrace();
        }

        public static void commit(Connection connection){
            try {
                connection.commit();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        public static void rollback(Connection connection){
            try {
                connection.rollback();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        public static void closeStatement(Statement statement){
            try {
                statement.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}


JAVA 全系列/第三阶段:数据库编程/JDBC技术 223楼
JAVA 全系列/第三阶段:数据库编程/MySQL数据库 225楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637