JDBC是为访问不同数据库提供的统一接口,为使用者屏蔽了许多使用细节
Java程序员使用JDBC,可以连接任何使用了JDBC驱动程序的数据库系统从而完成一系列对数据库的操作
JDBC程序编写基本步骤(mysql为例)
1)注册驱动——加载Driver类
2)获取链接——得到Connection
3)执行增删改查——发送sql给mysql执行
4)释放资源——关闭相关链接
前置工作
引入对应数据库的驱动文件到java项目中:
现在项目主目录下建一个文件夹,然后把对应的驱动程序复制到该文件夹下,接着右键驱动程序点击Add as Library加入到java项目中

注册驱动
创建驱动类:Driver driver = new com.mysql.jdbc.Driver();
获取链接
定义链接的url:String url = “jdbc:mysql://localhost:3306/datebasename“;
· jdbc:mysql//是规定好的协议,表示通过jdbc的方式链接mysql
· 如果数据库在本机就使用localhost,如果不在本机localhost处就填数据库所在机的ip地址
· 监听端口3306也可根据实际情况更改,最后datebasename是要链接的数据库名字
将用户名和密码放入Properties对象,Propertie是键值对形式
Properties propertises = new Propertise();
properties.setProperty(“user“,“用户名”);
properties.setProperty(“password“,“密码”);
其中的键user和password是规定好的,后面的值用户名和密码根据实际情况填写
接着尝试让数据库连接到给定的url :driver.connect(url,properties).var
得到返回的链接:Connection connect = driver.connect(url,properties);
执行sql语句
sql语句以字符串的形式定义比如:
String sql = “insert into actor values(‘小红’,‘女’,‘2001-2-12’)”;
表示向actor表中插入一行数据
statement用于执行静态sql语句并返回其生成的结果的对象
Statement statement = connect.createStatement();
int rows = statement.executeUpdate(sql);
如果是dml语句则rows返回的是表中受影响的行数,比如执行上面的插入语句,如果返回1则代表插入成功,返回0则代表插入失败,非dml语句如select语句比较特殊详见结果集部分。
关闭链接资源
关闭连接资源很重要,避免资源浪费
statement.close;
connect.close;
Java链接mysql的方法2
通过反射创建Driver对象:
class<?> aclass = Class.forName(“com.mysql.jdbc.Driver“);
Driver driver = (Driver)aclass.newInstence();
得到driver类后同第一种方法一样获取链接、执行sql语句。此方法的好处是加载Driver类是动态加载,更加灵活,减少依赖性
Java链接mysql方法3
通过DriverManager直接返回链接,不用将用户名、密码写入Propertise类了
Class.forName(“com.mysql.jdbc.Driver“);//得到Driver的clss对象即可,此时就自动完成了driver的注册
String url = “jdbc:mysql://localhost:3306/datebasename“;
String user = “root";
String password = "123“;
Connection connection = DriverManager.getConnection(url,user,password);
Java链接mysql方法4
将用户名和密码都写入配置文件,更加的灵活
先创建配置文件properties:
user=root;
password=123;
url=jdbc:mysql://localhost:3306/databasename
driver=com.mysql.jdbc.Driver
通过Propertises对象获取配置文件的信息:
Properties properties = new Propertises();
properties.load(new FileInputstream("配置文件地址"));
获取相关的值:
String user = properties.getProperty("user");
String password = properties,getProperty("password");
string driver = properties.getProperty("driver");
String url = properties.getProperty("url");
注册驱动(新版mysql可不写,建议写上):
Class.forName(“com.mysql.jdbc.Driver“)
拿到链接:
Connection connection = DriverManager.getConnection(url,user,password);
结果集ResultSet
表示数据库结果集的数据表,通常通过执行查询数据库的语句生成
Resultset对象保持一个光标指向其当前的数据行。最初,光标位于第一行之前
next方法将光标移动到下一行,并且由于在Resultset对象中没有更多行时返回false ,因此可以在while循环中使用循环来遍历结果集
previous()方法移动到上一行
写了查询的sql语句后使用statement的excuteQuery方法执行,返回得到resultset类然后使用while读取

也可在括号中指定列名直接获取对应列
控制台输出结果如下

Statement
Statement对象用于执行静态的sql语句,并返回其生成的结果对象
但是Statement存在SQL注入的问题,SQL注入是利用某些系统没有对用户输入的数据进行充分的检查,而在用户输入数据中注入非法的 SQL语句段或命令,恶意攻击数据库。
SQL注入主要通过PreparedStatement解决,因此实际应用中不用Statement,而是PreparedStatement代替
PreparedStatement要求在写sql语句时用占位符 ?来代替需要填入的值如:
String sql = “select count(*) from emp where username = ?and password = ?";
然后再调用PreparedStatement对象的setxxx()方法来设置这些参数
setxxx()方法有两个参数,第一个参数是要设置的sql语句中占位符的索引,即指定给第几个占位符赋值,索引从1开始,第二个参数是要设置的值
如果是select语句调用executeQuery(),返回ResultSet对象
如果是dml语句调用executeUpdate(),执行更新
实例:

JDBCutils类
由于在实际项目中操作数据库非常频繁,如果每次都注册驱动、获得链接、释放资源的话代码过于冗余,因此可以把每次都要进行的获取链接、释放资源封装成一个utils类,每次操作数据库只需要写sql语句并且调用utils类来获取链接和释放资源就行。
封装示例:
353

被折叠的 条评论
为什么被折叠?



