JDBC连接配置使用
JDBC:java数据库连接
是一套操作所有关系型数据库的规则(接口)。各个数据库实现该接口,提供驱动jar包;使用JDBC编程,真正执行的代码是驱动jar包中的实现类。
JDBC编程步骤:
1.注册驱动
2.获取连接
3.获取数据库操作对象(专门执行sql语句的对象)
4.执行sql语句
5.处理查询结果集(select时处理)
6.释放资源
JDBC IDEA配置
1.在module同级src下new一个directory(libs),把mysql-connector-java-8.0.28.jar复制粘贴到里面,然后再右键add as library
2.在module右键open module settings;点Libraries;点+号;选择java;选择mysql-connector-java-8.0.28.jar。(目录里找);应用然后ok
简单例子
没有用try catch
public class test {
public static void main(String[] args) throws Exception{
//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取连接对象
Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode","root","123456");
//3.获取数据库操作对象
Statement stmt=conn.createStatement();
//定义sql语句
String str="update emp set sal=10000 where ename='ward'";
//4.执行sql语句
stmt.executeUpdate(str);
//释放资源
stmt.close();
conn.close();
}
}
JDBC各个类对象
-
DriverManager 驱动管理对象
1.注册驱动 static void registerDriver(Driver driver):静态代码块 使用Class.forNmae("...Driver");时加载静态代码块 2.获取连接 getConnection()
-
Connection:数据库连接对象
1.获取执行sql的对象Statement createStatement() PreparedStatement PreparedStatement(String str); 2.管理事务 开启事务:setAutoCommit(boolean autoCommit);//true自动提交 提交事务:commit() 回滚事务:rollback()
-
Statement:执行sql的对象
execute()任意语句 int executeUpdate(sql)//执行DML(insert,delete,update)语句 DDL语句 返回影响的行数 ResultSet executeQuery();//执行DQL查询语句 返回结果集对象 ResultSet 取出查询结果 boolean next();向下移一行 判断当前行是否是最后一行末尾 get__(字段的数据类型)(参数) 获取行的列数据 参数:int:列的编号,从1开始 String 列的字段名 ResultSet 遍历结果集 while(x.next()){}
import java.sql.*;
import java.util.*;
public class JDBCTest01 {
public static void main(String[] args) {
//初始化界面
Map<String,String> useInfo=initUi();//返回用户输入信息;
//验证输入的用户和密码
boolean loginSuccess=login(useInfo);
System.out.println(loginSuccess?"登录成功":"登录失败");
}
private static boolean login(Map<String, String> useInfo) {
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
boolean flag=false;
try{
//注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");//1、注册驱动;
//获取连接
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode","root","123456");
stmt=conn.createStatement();//获取数据库操作对象
//执行sql;
//会出现sql注入现象,不安全;
String sql="select * from emp where ename='"+useInfo.get("useName")+"' and sal='"+useInfo.get("password")+"'";
rs=stmt.executeQuery(sql);//执行sql;
if(rs.next())
{
flag=true;
}
}catch (ClassNotFoundException c){
c.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}finally{
if(rs!=null)
{
try{
rs.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(stmt!=null)
{
try{
stmt.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(conn!=null)
{
try{
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
return flag;
}
private static Map<String, String> initUi() {//初始化界面
Scanner s=new Scanner(System.in);
System.out.print("用户名:");
String useName=s.nextLine();//读入一行;
System.out.print("密码:");
String password=s.nextLine();
Map<String,String> m=new HashMap<>();//创建Map,放入useName和password;
m.put("useName",useName);
m.put("password",password);
return m;//返回存有useName和password的集合Map;
}
}
获取src路径下的文件的方式 ClassLoader类加载器
ClassLoader a=类.class.getClassLoader();
URL url=a.getResource("src下的文件路径");
String path=url.getPath();//path为路径
PreparedStatement登陆
预编译sql:参数使用?作为占位符,处理sql注入问题
给?号赋值
对于获取sql对象返回PreparedStatement对象 Connection.prepareStatement(String sql)
给?赋值 setXxx(第几个问号,值)
....where user=? and password=?;
PreparedStatement Connection.prepareStatement(String sql)
PreparedStatement.setString(1,usernasme);//给问号赋值
PreparedStatement.setString(2,password);
ResultSet rs=PreparedStatement.executeQuery();
JDBC管理事务
使用Connection对象管理事务
管理事务
开启事务:setAutoCommit(boolean autoCommit);//true自动提交
提交事务:commit()
回滚事务:rollback()
数据库连接池
先创建多个数据库连接对象放到容器,有连接就使用容器里的连接,使用后放回连接池
实现:获取连接 getConnection() 归还连接: Connection.close()
由产商实现
c3p0
把c3p0-0.9.5.5.jar mchange-commons-java-0.2.19.jar 导入Mudole
在src下导入c3p0-config.xml
测试:
//1.创建数据库连接池对象
DataSource ds=new ComboPooledDataSource();
//2.获取连接对象
Connection conn=ds.getConnection();
System.out.println(conn);
ds.close();//归还连接对象
druid
https://repo1.maven.org/maven2/com/alibaba/druid/1.2.9/ 下载.jar包
导入jar包 src下druid.properties配置文件
-
获取数据库连接池对象 DruidDataSourceFactory
DruidDataSourceFactory.createDataSource(properties);
-
获取连接getConnection()
druid.properties配置文件
driverClassName=com.mysql.cj.jdbc.Driver
username=root
url=jdbc:mysql://127.0.0.1:3306/bjpowernode
password=123456
initialSize=5
maxActive=10
maxWait=3000
测试:
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
public class druidDemo {
public static void main(String[] args) throws Exception{
Properties pro=new Properties();
InputStream is=druidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
//获取连接池对象
DataSource ds= DruidDataSourceFactory.createDataSource(pro);
//获取连接
Connection conn=ds.getConnection();
System.out.println(conn);
}
}