how2j.cn

下载区
文件名 文件大小
mysql-connector-java-5.0.8-bin.jar 528k
本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频



13分3秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)



步骤 1 : 为项目导入mysql-jdbc的jar包   
步骤 2 : 初始化驱动   
步骤 3 : 建立与数据库的连接   
步骤 4 : 创建Statement   
步骤 5 : 执行SQL语句   
步骤 6 : 关闭连接   
步骤 7 : 使用try-with-resource的方式自动关闭连接   
步骤 8 : 练习-一次性 插入100条数据   
步骤 9 : 答案-一次性 插入100条数据   

步骤 1 :

为项目导入mysql-jdbc的jar包

edit
访问MySQL数据库需要用到第三方的类,这些第三方的类,都被压缩在一个叫做Jar的文件里。
为了代码能够使用第三方的类,需要为项目导入mysql的专用Jar包。
该包mysql-connector-java-5.0.8-bin.jar可以在右边下载
通常都会把项目用到的jar包统一放在项目的lib目录下,在本例就会放在
E:\project\j2se\lib 这个位置
然后在eclipse中导入这个jar包

导包步骤: 右键project->property->java build path->libaries->add external jars
为项目导入mysql-jdbc的jar包
通过Class.forName("com.mysql.jdbc.Driver");
初始化驱动类com.mysql.jdbc.Driver
就在 mysql-connector-java-5.0.8-bin.jar中
如果忘记了第一个步骤的导包,就会抛出ClassNotFoundException

Class.forName是把这个类加载到JVM中,加载的时候,就会执行其中的静态初始化块,完成驱动的初始化的相关工作。
初始化驱动
package jdbc; public class TestJDBC { public static void main(String[] args) { //初始化驱动 try { //驱动类com.mysql.jdbc.Driver //就在 mysql-connector-java-5.0.8-bin.jar中 //如果忘记了第一个步骤的导包,就会抛出ClassNotFoundException Class.forName("com.mysql.jdbc.Driver"); System.out.println("数据库驱动加载成功 !"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
步骤 3 :

建立与数据库的连接

edit
建立与数据库的Connection连接
这里需要提供:
数据库所处于的ip:127.0.0.1 (本机)
数据库的端口号: 3306 (mysql专用端口号)
数据库名称 how2java
编码方式 UTF-8
账号 root
密码 admin


注: 这一步要成功执行,必须建立在mysql中有数据库how2java的基础上,如果没有,点击创建数据库查看如何进行数据库的创建。
建立与数据库的连接
package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class TestJDBC { public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver"); // 建立与数据库的Connection连接 // 这里需要提供: // 数据库所处于的ip:127.0.0.1 (本机) // 数据库的端口号: 3306 (mysql专用端口号) // 数据库名称 how2java // 编码方式 UTF-8 // 账号 root // 密码 admin Connection c = DriverManager .getConnection( "jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root", "admin"); System.out.println("连接成功,获取连接对象: " + c); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Statement是用于执行SQL语句的,比如增加,删除
创建Statement
package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class TestJDBC { public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver"); Connection c = DriverManager .getConnection( "jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root", "admin"); // 注意:使用的是 java.sql.Statement // 不要不小心使用到: com.mysql.jdbc.Statement; Statement s = c.createStatement(); System.out.println("获取 Statement对象: " + s); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
s.execute执行sql语句
执行成功后,用mysql-front进行查看,明确插入成功

执行SQL语句之前要确保数据库how2java中有表hero的存在,如果没有,需要事先创建表
执行SQL语句
package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class TestJDBC { public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver"); Connection c = DriverManager .getConnection( "jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root", "admin"); Statement s = c.createStatement(); // 准备sql语句 // 注意: 字符串要用单引号' String sql = "insert into hero values(null,"+"'提莫'"+","+313.0f+","+50+")"; s.execute(sql); System.out.println("执行插入语句成功"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
数据库的连接是有限资源,相关操作结束后,养成关闭数据库的好习惯
先关闭Statement
后关闭Connection
package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class TestJDBC { public static void main(String[] args) { Connection c = null; Statement s = null; try { Class.forName("com.mysql.jdbc.Driver"); c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root", "admin"); s = c.createStatement(); String sql = "insert into hero values(null," + "'提莫'" + "," + 313.0f + "," + 50 + ")"; s.execute(sql); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { // 数据库的连接时有限资源,相关操作结束后,养成关闭数据库的好习惯 // 先关闭Statement if (s != null) try { s.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 后关闭Connection if (c != null) try { c.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
步骤 7 :

使用try-with-resource的方式自动关闭连接

edit
如果觉得上一步的关闭连接的方式很麻烦,可以参考关闭流 的方式,使用try-with-resource的方式自动关闭连接,因为Connection和Statement都实现了AutoCloseable接口
package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class TestJDBC { public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } try ( Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root", "admin"); Statement s = c.createStatement(); ) { String sql = "insert into hero values(null," + "'提莫'" + "," + 313.0f + "," + 50 + ")"; s.execute(sql); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
步骤 8 :

练习-一次性 插入100条数据

edit Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
借助循环,和上面学习到的JDBC的知识,向数据库中插入100条数据,并在mysql-front中观察查询结果
练习-一次性 插入100条数据
步骤 9 :

答案-一次性 插入100条数据

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费3个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费3个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

1分44秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


做一个0-100的for循环,生成不同的sql语句,然后执行
package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class TestJDBC { public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } try ( Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root", "admin"); Statement s = c.createStatement(); ) { for (int i = 0; i < 100; i++) { String sql = "insert into hero values(null," + "'英雄"+i+"'" + "," + 313.0f + "," + 50 + ")"; s.execute(sql); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2019-10-31 交作业
jxy




交作业
package com.jxyproject.model.jdbc;

import java.sql.*;

public class TestJDBC {
    public static void main(String[] args) {
        Connection c = null;
        PreparedStatement pst = null;
        //初始化驱动
        try {
            //驱动类com.mysql.cj.jdbc.Driver
            //就在 mysql-connector-java-8.0.18-bin.jar中
            //如果忘记了第一个步骤的导包,就会抛出ClassNotFoundException
            Class.forName("com.mysql.cj.jdbc.Driver");
            c = DriverManager
                    .getConnection("jdbc:mysql://127.0.0.1:3306/study?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT", "root", "admin");
            System.out.println("连接成功,获取连接对象: " + c);
            // 准备sql语句
            pst = c.prepareStatement("insert into hero values(null,?,?,?)");
            for (int i = 1; i < 101; i++) {
                pst.setString(1,"英雄"+i);
                pst.setFloat(2,313);
                pst.setInt(3,50);
                pst.execute();
            }

            System.out.println("执行插入语句成功");

        } catch (ClassNotFoundException | SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            // 数据库的连接时有限资源,相关操作结束后,养成关闭数据库的好习惯
            // 先关闭PreparedStatement
            if (pst != null)
                try {
                    pst.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            // 后关闭Connection
            if (c != null)
                try {
                    c.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

        }

    }
}

							


1 个答案

削板军霸
答案时间:2019-10-31



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2019-10-30 加载驱动ok,但是连接失败
java灬白




前面的加载驱动可以,后面连接失败,有按照教程创建how2java,账号密码都是root。因为我是安装了64位的mysql,和导入mysql-connector-java-8.0.18.jar,比较困惑怎么处理,求指导
package mysql数据包的导入;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Demo2 {
	public static void main(String[] args) {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			//简历与数据库的Connection连接
			//这里需要提供:
			//数据库的端口号:3306(mysql专用端口号)
			//数据库名称 how2java
			//编码方式 UTF-8
			//账号root
			//密码root
			Connection c = DriverManager
					.getConnection(
							"jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8",
							"root","root");
			System.out.println("连接成功,获取连接对象:"+c);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
java.sql.SQLException: The server time zone value '?й???????' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
	at mysql.connector.java@8.0.18/com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
	at mysql.connector.java@8.0.18/com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
	at mysql.connector.java@8.0.18/com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
	at mysql.connector.java@8.0.18/com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
	at mysql.connector.java@8.0.18/com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
	at mysql.connector.java@8.0.18/com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:76)
	at mysql.connector.java@8.0.18/com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836)
	at mysql.connector.java@8.0.18/com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)
	at mysql.connector.java@8.0.18/com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
	at mysql.connector.java@8.0.18/com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199)
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
	at mysql数据包的导入.Demo2.main(Demo2.java:19)
Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value '?й???????' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
	at mysql.connector.java@8.0.18/com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
	at mysql.connector.java@8.0.18/com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:85)
	at mysql.connector.java@8.0.18/com.mysql.cj.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:132)
	at mysql.connector.java@8.0.18/com.mysql.cj.protocol.a.NativeProtocol.configureTimezone(NativeProtocol.java:2121)
	at mysql.connector.java@8.0.18/com.mysql.cj.protocol.a.NativeProtocol.initServerSession(NativeProtocol.java:2145)
	at mysql.connector.java@8.0.18/com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1310)
	at mysql.connector.java@8.0.18/com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:967)
	at mysql.connector.java@8.0.18/com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:826)
	... 6 more


1 个答案

jxy
答案时间:2019-10-31
Class.forName("com.mysql.cj.jdbc.Driver");
Connection c = DriverManager
                    .getConnection("jdbc:mysql://127.0.0.1:3306/study?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT", "root", "admin");  闲话不多说



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2019-10-20 能运行但结果有问题
2019-10-16 数据库加载成功 但是连接不到
2019-09-26 插入100条数据——数据库sql插入
2019-09-14 遇到无法加载的问题的可以看看
2019-09-07 代码中有一点小小的问题
2019-07-27 需要导入的包也导入了,为什么还报错,找不到类
2019-07-24 气死,一个标点的问题,搞了半天
2019-07-18 为什么增加提莫记录那里需要+号连接?
2019-07-16 练习-一次性 插入100条数据
2019-06-17 ZZ交作业 JDBC插入100条数据
2019-06-10 建立连接时会报错
2019-06-09 mysql5之后如果不写Class.forName()
2019-06-01 插入100条数据,交作业,用的是idea(截图有导包教程),顺便弄了一下hp和damage的自增自减
2019-05-15 要是能出idea的教程就更好了
2019-05-14 不如直接用PreparedStatement教学
2019-05-09 交作业
2019-05-04 IDEA怎么弄?
2019-04-26 加载驱动器
2019-04-22 作业
2019-04-17 为什么sql语句要用+连起来?不使用+号不是更简洁吗
2019-04-10 作业
2019-04-06 MySQL查询name这一列出现乱码
2019-03-31 作业5第23行没懂
2019-03-19 作业3!
2019-03-14 程序运行成功,但数据库没有被修改
2019-02-25 交作业
2019-02-25 交作业
2019-01-15 动态ip应该怎么填?
2018-12-26 初始化驱动java.lang.ClassNotFoundException
2018-12-25 没有人在连接数据库时遇到时间返回的错误吗
2018-12-24 为什么包导入之后还是提示Caused by: java.lang.ClassNotFoundException: java.sql.Driver
2018-12-22 插入命令的第一个那个Null是什么意思
2018-12-06 交作业
2018-12-05 为什么我的程序加上最开始的package jdbc就是错了,去掉运行一切正常
2018-11-26 有沒有使用try-with-resource的方式自动关闭连接弄好代碼的,給我看看,謝謝大神,小女子這廂有禮了。
2018-11-26 答案
2018-10-30 无法连接到数据库
2018-10-23 需要对c的类型进行强转
2018-09-26 加载驱动的时候可以,但是连接数据库的时候就出问题了
2018-09-20 交作业
2018-09-11 为什么中文显示不出来
2018-08-16 向MySQL插入中文字符时出现乱码
2018-08-09 无法连接数据库,求解
2018-07-19 为什么insert语句要拼接呢?实测不拼接也能成功写入
2018-05-24 老师们 小弟求助
2018-05-10 JDBC连接异常
2018-04-20 请问为什么是不等于空的时候关闭?
2018-03-31 mysql的jar包无法导入到WebContent/Web-INF的lib下
2018-03-13 头一天正常,第二天连接不上数据库
2018-01-30 站长,请问有JDBC连接ORACLE的实例吗?
2017-12-24 按照“步骤 1”操作,仍然提示“java.lang.ClassNotFoundException”异常
2017-11-21 没有用到发的MySQL的库啊,我看一直导入的是java.sql包里面的类?
2017-10-21 数据库属性列的修改
2017-10-07 为什么在java语句中进行插入是会是如图的现象
2017-09-30 for了100个,为什么在数据库显示了400个英雄对象
2017-09-26 加载驱动管理器为什么不写这句也可以
2017-09-20 疑惑
2017-09-07 关于数据库添加和删除问题
2017-09-06 不能执行executeQuery
2017-08-09 复制代码运行后出现如下错误怎么处理啊
2017-07-30 例子是不是有点老呀?我查了mysql官网,例子和楼主的不太一样
2017-07-26 步骤7:try-with-resource这个功能关闭数据库连接与上面步骤6关闭数据库代码一模一样没有看到新加的代码和功能,楼主是忘记了写代码了还是什么情况
2017-07-04 sql拼接规则
2017-06-01 无法实现try-with-resource的方式的关闭连接
2017-05-06 向id里面insert的null,为什么变成int了呢?
2017-02-25 执行SQL语句的时候
2016-12-02 建议这里也加一句话
2016-08-26 Driver类
2016-08-12 出现无法加载错误
2016-05-26 建立lib文件夹




提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 JAVA 中级-JDBC-Hello JDBC 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 881555796
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图