做个笔记,觉得第一次学习肯定有很多弯路于是分享一下连接的过程,嘿嘿
首先,当然是导入jar包啦,也就是MySQL的驱动,当然这里驱动的意思就是Java提供了接口然后不同的数据库来实现这些接口然后封装起来的这些代码,加载驱动后我们就能用sql语言和Java进行交互啦,下面是下载链接
点击Platform Independent
然后按照截图点击
点击框框里面的
下载完成后是个zip文件,然后右键解压到当前文件夹或者你喜欢的地方,然后找到它我的直接解压到当前文件夹
先看看里面有这个,也就是所谓的jar包了
然后打开IDEA导入jar包
按照顺序点击即可
导入后才会出现框框里面的这个jar包,我的之前就导入了所以现在已经出现
然后找到刚刚我们下载的jar包 双击这个文件就行 最后别忘点右下角的确认哦
然后看看看你的这里有没有jar包,有就导入成功
当然这只是刚刚开始,做好了准备工作
然后你需要建个数据库,不用建表,记住你建的数据库的名字就行
接下来新建个类,类名随便,这个应该都会
然后 按照我这样写
public class Demo {
public static void main(String[] args) throws SQLException {
Connection con = null;
String sql;
String url = "jdbc:mysql://localhost:3306/mysql?"
+ "user=root&password=7788sS&useUnicode=true&characterEncoding=gbk"
+"&useLegacyDatetimeCode=false&serverTimezone=UTC"; //这里只有password=7788sS 和 3306/mysql? 需要你改,把7788sS换成你登录MySQL的密码 把mysql 换成你刚建好数据库的名字, 其他地方不用改 要问这串是什么意思,,仔细看看都是设置字体,还有服务时间,好奇的可以去百度
try{
Class.forName("com.mysql.cj.jdbc.Driver"); //加载驱动
con = DriverManager.getConnection(url); //获取连接
Statement stmt = con.createStatement();//用connection获取Statement对象
sql = "create table barber(id SMALLINT NOT NULL AUTO_INCREMENT," +
"No VARCHAR(10) NOT NULL," +
"姓名 VARCHAR(20) NOT NULL," +
"性别 VARCHAR(10) NOT NULL," +
"手机 VARCHAR(15) NOT NULL," +
"工资 DOUBLE NOT NULL DEFAULT 0.0," +
"奖金 DOUBLE NOT NULL DEFAULT 0.0," +
"提成 DOUBLE NOT NULL DEFAULT 0.0,"+
"PRIMARY KEY(id)" +
")engine=innodb charset=gbk"; //创建表的语句把这些字符串拼接成一个赋值给String类型的sql
stmt.executeUpdate(sql); //它会执行sql字符串所代表的mysql语句
上一句这么些更好
int result = stmt.executeUpdate(sql);// executeUpdate语句会返回一个受影响的行数,如果返回-1就没有成功
if (result != -1) {
sql = "insert into myTable(No,姓名,性别,手机,工资) values('001','小猪','男','1768920',5000)"; //增删改查语句,在此不解释了,不会可以去学学MySQL怎么命令行增删改查
result = stmt.executeUpdate(sql); //执行sql代表的语句
sql = "insert into myTable(No,姓名,性别,手机,工资) values('002','小猪哥','男','1317835',4500)";//同上
result = stmt.executeUpdate(sql);
sql = "select * from myTable"; //查询语句
ResultSet rs = stmt.executeQuery(sql);// executeQuery会返回结果的集合,否则返回空
System.out.println("id\tNo\t姓名\t性别\t手机\t工资");
while (rs!=null&&rs.next()) { //先进行判断是不是没有查询成功
System.out.println(rs.getInt(1) + "\t" + rs.getString(2)+"\t"+rs.getString(3)+"\t"+ rs.getString(4)+"\t"+ rs.getString(5)+"\t"+rs.getDouble(6));// 这里的1 2 3 代表第列
}
}
} catch (SQLException e) {
System.out.println("MySQL操作错误");
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
con.close();
}
}
然后就打印出来啦
源码
import java.sql.*;
public class Demo {
public static void main(String[] args) throws SQLException {
Connection con = null;
String sql;
String url = "jdbc:mysql://localhost:3306/information?"
+ "user=root&password=778899sS&useUnicode=true&characterEncoding=gbk"
+"&useLegacyDatetimeCode=false&serverTimezone=UTC";
try{
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("成功加载MySQL驱动程序");
con = DriverManager.getConnection(url);
Statement stmt = con.createStatement();
sql = "create table myTable(id SMALLINT NOT NULL AUTO_INCREMENT," +
"No VARCHAR(10) NOT NULL," +
"姓名 VARCHAR(20) NOT NULL," +
"性别 VARCHAR(10) NOT NULL," +
"手机 VARCHAR(15) NOT NULL," +
"工资 DOUBLE NOT NULL DEFAULT 0.0," +
"奖金 DOUBLE NOT NULL DEFAULT 0.0," +
"提成 DOUBLE NOT NULL DEFAULT 0.0,"+
"PRIMARY KEY(id)" +
")engine=innodb charset=gbk";
int result = stmt.executeUpdate(sql);// executeUpdate语句会返回一个受影响的行数,如果返回-1就没有成功
if (result != -1) {
System.out.println("创建数据表成功");
sql = "insert into myTable(No,姓名,性别,手机,工资) values('001','小猪','男','1768920',5000)";
result = stmt.executeUpdate(sql);
sql = "insert into myTable(No,姓名,性别,手机,工资) values('002','小诸哥','男','1317835',4500)";
result = stmt.executeUpdate(sql);
sql = "select * from myTable";
ResultSet rs = stmt.executeQuery(sql);// executeQuery会返回结果的集合,否则返回空值
System.out.println("id\tNo\t姓名\t性别\t手机\t工资");
while (rs!=null&&rs.next()) {
System.out.println(rs.getInt(1) + "\t" + rs.getString(2)+"\t"+rs.getString(3)+"\t"+ rs.getString(4)+"\t"+ rs.getString(5)+"\t"+rs.getDouble(6));// 入如果返回的是int类型可以用getInt()
}
}
} catch (SQLException e) {
System.out.println("MySQL操作错误");
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
con.close();
}
}
}
综上可以总结为以下几步
(1)加载数据库驱动 通常我们使用Class类的forName()静态方法来加载驱动。例如如下代码:
// 加载驱动
Class.forName(driverClass)
上面代码中的driverClass就是数据库驱动类所对应的字符串。例如,加载MySQL的驱动采用如下代码:
Class.forName("com.mysql.jdbc.Driver"); 加载MySQL的驱动
(2)通过DriverManager获取数据库连接。DriverManager提供了如下方法:
DriverManager.getConnection(String url,Stringuser,String pass)。//获取数据库连接
(3)通过Connection对象创建Statement对象。Connection创建Statement的方法有如下3个。
[插图] createStatement():创建基本的Statement对象。 prepareStatement(String sql):根据传入的SQL语句创建预编译的Statement对象。 prepareCall(String sql):根据传入的SQL语句创建CallableStatement对象。
(4)使用Statement执行SQL语句。所有的Statement都有如下3个方法来执行SQL语句。
[插图] execute():可以执行任何SQL语句,但比较麻烦。executeUpdate():主要用于执行DML和DDL语句。执行DML语句返回受SQL语句影响的行数,执行DDL语句返回0。 executeQuery():只能执行查询语句,执行后返回代表查询结果的ResultSet对象。
解释一下数据库的概念
人们通常用数据库这个术语来代表他们使用的数据库软件。这是不正确的,它是引起混淆的根源。确切地说,**数据库软件应称为DBMS(**数据库管理系统)。数据库是通过DBMS创建和操纵的容器。数据库可以是保存在硬设备上的文件,但也可以不是。在很大程度上说,数据库究竟是文件还是别的什么东西并不重要,因为你并不直接访问数据库;你使用的是DBMS,它替你访问数据库。而SQL是一种专门用来与数据库通信的语言。MySQL,就是一种DBMS
1 DriverManager:用于管理JDBC驱动的服务类。程序中使用该类的主要功能是获取Connection对象,该类包含以下方法public static synchronized Connection getConnection(String url,String user,String pass) throws SQLException:该方法获得url对应数据库的连接。
2 Connection:代表数据库连接对象,每个Connection代表一个物理连接会话。要想访问数据库,必须先获得数据库连接。该接口的常用方法如下。Statement createStatement() throws SQLExcetpion:该方法返回一个Statement对象。 PreparedStatement prepareStatement(String sql) throws SQLExcetpion:该方法返回预编译的Statement对象,即将SQL语句提交到数据库进行预编译。
3 Statement:用于执行SQL语句的工具接口。它的常用方法如下。int executeUpdate(String sql)throws SQLExcetion:该方法用于执行DML语句,并返回受影响的行数;该方法也可用于执行DDL语句,执行DDL语句将返回0。 [插图] boolean execute(String sql)throws SQLException:该方法可执行任何SQL语句。如果执行后第一个结果为ResultSet对象,则返回true;如果执行后第一个结果为受影响的行数或没有任何结果,则返回false。
4 PreparedStatement:预编译的Statement对象。PreparedStatement是Statement的子接口,它允许数据库预编译SQL语句(这些SQL语句通常带有参数),以后每次只改变SQL命令的参数,避免数据库每次都需要编译SQL语句,因此性能更好。相对于Statement而言,使用PreparedStatement执行SQL语句时,无须再传入SQL语句,只要为预编译的SQL语句传入参数值即可。所以它比Statement多了如下方法。void setXxx(int parameterIndex,Xxx value):该方法根据传入参数值的类型不同,需要使用不同的方法。传入的值根据索引传给SQL语句中指定位置的参数。
5 PreparedStatement同样有executeUpdate()、executeQuery()和execute()三个方法,只是这三个方法无须接收SQL字符串,因为PreparedStatement对象已经预编译了SQL命令,只要为这些命令传入参数即可。