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-03-19 作业3!
帝珈



哇...记得一定要在项目里加上mysql-connector-java-5.0.8-bin.jar ,就是JDBC第二课的那个文件,我一章一项目,搞完懵逼了好一会儿,之后才突然想到我的图形界面项目没加...........
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class 账号密码验证 {

	public static void main(String[] args) {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException a) {
			a.printStackTrace();
		}
		
		JFrame f = new JFrame();
		f.setSize(500, 400);
		f.setLocation(200, 200);
		f.setLayout(null);

		JPanel p = new JPanel();
		p.setBounds(0, 20, 500, 150);

		JLabel l1 = new JLabel("账号:");
		JTextField t = new JTextField();//文本框
		t.setPreferredSize(new Dimension(80, 30));
		JLabel l2 = new JLabel("密码:");
		JPasswordField pf = new JPasswordField();//密码框
		pf.setPreferredSize(new Dimension(80, 30));
		p.add(l1);
		p.add(t);
		p.add(l2);
		p.add(pf);

		JButton b = new JButton("登入");
		b.setBounds(210, 100, 80, 30);
		b.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				int str1 = Integer.parseInt(t.getText());//账号转换为int
				String str2 = String.valueOf(pf.getPassword());//getPassword返回的是char,转换成String
				String sql = "select*from 嘿嘿嘿 where 账号 = ? and 密码 = ?";
				try (Connection c = DriverManager.getConnection(
						"jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root", "xingxing520");
						PreparedStatement ps = c.prepareStatement(sql);) {
					ps.setInt(1, str1);
					ps.setString(2, str2);
					ResultSet r = ps.executeQuery();
					if (r.next())
						JOptionPane.showMessageDialog(f, "登入成功");
					else
						JOptionPane.showMessageDialog(f, "账号或密码错误");
				} catch (SQLException e2) {
					e.paramString();
				}
			}
		});

		f.add(b);
		f.add(p);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
	}

}

							





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





2019-03-14 程序运行成功,但数据库没有被修改
guiren



程序运行成功,但数据库没有被修改
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();
           
           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) {
        	e.printStackTrace();
        }           
    }
}
数据库并没有改变


1 个答案

老板给我包二重积分 答案时间:2019-03-20
对数据库操作后,多进行数据库的刷新



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





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的方式的关闭连接