1. 常见命令
略
2. 获取连接的方式
五种方式(四+1)。
public class ConnectionTest {
//方式一
@Test
public void testConnection_01() throws SQLException {
Driver driver=new com.mysql.cj.jdbc.Driver();
String url="jdbc:mysql://localhost:3306/test";//主协议:子协议://端口号/数据库名
Properties info=new Properties();//将用户名密码封装于此
info.setProperty("user","root");
info.setProperty("password","111111");
Connection conn= driver.connect(url,info);
System.out.println(conn);
}
//方式二:对方式一的迭代 如下中 不出现第三方api 使得程序具有更好的可移植性
@Test
public void testConnection_02() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
//1.获取Driver实现类的对象:使用反射
Class clazz= Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver= (Driver) clazz.newInstance();
//提供要连接的数据库
String url="jdbc:mysql://localhost:3306/test";//主协议:子协议://端口号/数据库名
Properties info=new Properties();//将用户名密码封装于此
info.setProperty("user","root");
info.setProperty("password","111111");
//获取链接
Connection conn =driver.connect(url,info);
System.out.println(conn);
}
//方式三:使用DriverManager替换Driver
@Test
public void testConnection_03() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
//1.获取Driver实现类的对象:使用反射
Class clazz= Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver= (Driver) clazz.newInstance();
//2.提供三个连接的信息
String url="jdbc:mysql://localhost:3306/test";//主协议:子协议://端口号/数据库名
String user="root";
String password="111111";
//注册驱动
DriverManager.registerDriver(driver);
//获取链接
Connection conn =DriverManager.getConnection(url,user,password);
System.out.println(conn);
}
//方式四:三的基础上的优化
@Test
public void testConnection_04() throws Exception {
//1.提供三个连接的信息
String url="jdbc:mysql://localhost:3306/test";//主协议:子协议://端口号/数据库名
String user="root";
String password="111111";
//2.加载驱动 在Driver 底层的静态代码块中存在于下文注释信息功能相同的静态代码块
Class.forName("com.mysql.cj.jdbc.Driver");
// Driver driver= (Driver) clazz.newInstance();
// //注册驱动
// DriverManager.registerDriver(driver);
//3.获取链接
Connection conn =DriverManager.getConnection(url,user,password);
System.out.println(conn);
}
//方式四Pro:四的基础上的改变
@Test
public void testConnection_041() throws Exception {
//1.提供三个连接的信息
String url="jdbc:mysql://localhost:3306/test";//主协议:子协议://端口号/数据库名
String user="root";
String password="111111";
//2.加载驱动 在Driver 底层的静态代码块中存在于下文注释信息功能相同的静态代码块
// Class.forName("com.mysql.cj.jdbc.Driver"); jar包中已经有了,但是不建议注释 因为只有mysql中可以注释掉
// Driver driver= (Driver) clazz.newInstance();
// //注册驱动
// DriverManager.registerDriver(driver);
//3.获取链接
Connection conn =DriverManager.getConnection(url,user,password);
System.out.println(conn);
}
//五 最终版 将数据库连接需要的四个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接。
@Test
/*
好处:
1.实现了数据和代码的分离 (实现了解耦)
2.如果需要修改配置文件信息 这样可以避免重新打包程序代码
*/
public void testConnection_05() throws Exception {
//1.读取配置文件中的四个基本信息
InputStream is=ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");//获取类的加载器
Properties pros=new Properties();
pros.load(is);
String user= pros.getProperty("user");
String password= pros.getProperty("password");
String url= pros.getProperty("url");
String driver= pros.getProperty("driver");
Class.forName(driver);
Connection conn=DriverManager.getConnection(url,user,password);
System.out.println(conn);
}
}
3. 使用PreparedStatement实现CRUD操作
3.1 插入
public class prepareedStatement {
/*
增删改(无返回) 查(有返回)操作
*/
//向表添加一条记录
@Test
public void testInsert(){
Connection conn = null;
PreparedStatement ps = null;
try {
//1.读取配置文件中的四个基本信息
//获取类的加载器
InputStream is=ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties pros=new Properties();
pros.load(is);
String user= pros.getProperty("user");
String password= pros.getProperty("password");
String url= pros.getProperty("url");
String driver= pros.getProperty("driver");
Class.forName(driver);
conn= DriverManager.getConnection(url,user,password);
//预编译sql语句
String sql="insert into customers(name,email,birth)values(?,?,?)";//?占位符
ps=conn.prepareStatement(sql);
//填充占位符
ps.setString(1,"哪吒");//与数据库交互的索引从一开始。
ps.setString(2,"nezha@email.com");
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date=sdf.parse("1000-1-1");
ps.setDate(3,new Date(date.getTime()));//date.getTime()将util下的date转换为sql下的date(共同点 毫秒数相同)
//执行操作
ps.execute();
}catch (Exception e){
e.printStackTrace();
}finally {
}
//资源的关闭
try {
if (ps!=null)
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (conn!=null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println("插入成功!");
}
}