1. 在同一个类里面,连接数据库并操作数据
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class JdbcTest {
public static void main(String[] args) throws Exception{
//主协议:子协议://主机名(IP地址也行):端口号(mysql统一为3306)/数据库名
//指定明确的时区 是否SSL连接,返回一个Boolean值 字符集类型
String url="jdbc:mysql://localhost:3306/exercise?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT";
String userName="root";
String password="123456";
//1、加载驱动
//三种方法的到Class对象 obj.getClass() ClassName.class Class.forName(完全限定名)
// Class类实例--com.mysql.jdbc.Driver 堆中就产生一个Driver类的Class类型的实例--mysql的driver
Class.forName("com.mysql.cj.jdbc.Driver");
//2、得到连接
Connection connection= DriverManager.getConnection(url,userName,password);
//3、得到statement对象
Statement statement=connection.createStatement();
//4、对表的操作
String sql="insert into score1 values('03','03','100')";
int r=statement.executeUpdate(sql);
System.out.println("R="+r);
System.out.println("连接成功");
}
}
Statement接口
Statement statement=connection.createStatement();
sql语句的执行器,执行sql语句
executeUpdate(sql)方法,执行insert、update、delete,返回的结果是一个整数,表示影响的行数
executeQuery(sql)方法,执行select,返回一个结果集
ResultSet接口
用于保存结果集[一个表,行与列组成]
package com.kgc.one;
import com.kgc.one.utils.ConnectionUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
public class JdbcTest {
public static void main(String[] args) throws Exception{
Connection conn=ConnectionUtils.getConn();
Statement statement=conn.createStatement();
String sql="select s_id,s_name,s_sex,s_age,c_id from student";//查出的结果集有5行
//executeQuery()只能用来执行select语句
ResultSet resultSet=statement.executeQuery(sql);
//可以得到列名 列数
ResultSetMetaData rsm=resultSet.getMetaData();
//resultSet.next() next()最开始指向第一行的前面next()指向下一行
//next()有下一行时返回true 没有下一行时返回false 所以可以用while循环,输出所有的数据
while(resultSet.next()) {
//这里的行数是根据所查的结果集确定的
int id= resultSet.getInt(1);
String name=resultSet.getString(2);
String sex=resultSet.getString(3);
int age=resultSet.getInt(4);
int c_id=resultSet.getInt(5);
System.out.println(id+","+name+","+sex+","+age+","+c_id);
}
resultSet.close();
statement.close();
}
}
ResultSet rs=statement.executeQuery("select * from score1")
2. 将操作数据库定义成一个方法,形参为sql语句
ClassesDao类
package com.kgc.one;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
/*
* 将所有对表的操作全部写在这个类里面
* */
public class ClassesDao {
public static int insert(String sql) throws Exception{
String url="jdbc:mysql://localhost:3306/exercise?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT";
String userName="root";
String password="123456";
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection(url, userName, password);
Statement statement = connection.createStatement();
//设置i只是为了显示插入了几行,判断有没有插入成功
int i=statement.executeUpdate(sql);
return i;
}
}
JdbcTest类
package com.kgc.one;
public class JdbcTest {
public static void main(String[] args) throws Exception{
String sql="insert into score1 values(11,11,90)";
System.out.println(ClassesDao.insert(sql));
}
}
3.使用单例模式来创建连接对象,供所有用户来使用这个连接对象
之前创建的连接,只能使用一次,执行一次Sql语句就要连接一次,利用率低,利用单例模式创建一个连接,可以多次使用
ConnectionUtils类
package com.kgc.one.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
/**
* 使用单例模式构造一个连接对象
*/
public class ConnectionUtils {
private static Connection conn=null;
private static String driver="com.mysql.cj.jdbc.Driver";
//根据自己来写:数据库名,用户名,密码
private static String url="jdbc:mysql://localhost:3306/exercise?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT";
private static String username="root";
private static String password="123456";
private ConnectionUtils(){}
//每次只执行一次
static {
try{
Class.forName(driver);
conn= DriverManager.getConnection(url,username,password);
System.out.println("连接成功");
}catch (Exception ex){
ex.printStackTrace();
}
}
//调用这个方法返回一个连接
public static Connection getConn(){
return conn;
}
//该方法调用Sql语句
public static int executeUpdate(String sql) throws Exception{
//先通过getConn()获得一个连接,再通过createStatement()方法得到Statement
Statement statement=ConnectionUtils.getConn().createStatement();
int result=statement.executeUpdate(sql);
return result;
}
}
JdbcTest类
package com.kgc.one;
import com.kgc.one.utils.ConnectionUtils;
public class JdbcTest {
public static void main(String[] args) throws Exception{
String sql="insert into score1 values(11,11,90)";
System.out.println(ConnectionUtils.executeUpdate(sql));
System.out.println("添加成功");
}
}