JDBC数据库相关操作

1:JDBC开发步骤

1.1 JDBC代码开发步骤

Remark:下列代码在实际开发中都需要Try catch finally来抓取异常

 1:注册驱动

 2:获取链接

 3:获得语句执行平台

 4:执行SQL语句

 5:处理结果

 6:释放资源

1.2 JDBC代码的实现-简单的增删改(INSERT/UPDATE /DELETE)

(注意:在实现代码之前需要在Eclipse中导入SQL驱动Jar包)

PS:该代码中第四部和第五步实现步骤不同 其他的基本相似

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;

public class JDBCDemo {

public static void main(String[] args) throws Exception {

//main方法为static 所以它只能调用静态static方法

JDBCutils();

}

public static void JDBCutils() throws Exception {

//1:注册驱动

//Class.forName为反射技术

Class.forName("com.mysql.jdbc.Driver");

//2:获取链接

String url = "jdbc:mysql://服务器ip:3306/Web08";

String user = "root";

String password = "密码";

//用Java.sql包下面的DriverManager类调用getConnection方法试图建立到给定数据库 URL的连接,返回static Connection对象

Connection con = DriverManager.getConnection(url, user, password);

//3:获得语句执行平台

//调用Connection接口实现方法createStatement() 创建一个 Statement对象来将 SQL 语句发送到数据库  返回值为Statement对象

 Statement stam = con.createStatement();

//4:执行SQL语句

 //调用Statement接口对象的实现方法executeUpdate() 进行SQL语句的执行,返回值为int,executeUpdate()执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句

 int row = stam.executeUpdate("UPDATE product SET pname='wokao' WHERE pid=5;");

//5:处理结果

 //返回值row为SQL中受影响的行数

 System.out.println(row);

//6:释放资源

 //int对象资源不用关闭

 stam.close();

 con.close();

}

}

 

1.3 JDBC代码的实现-简单的查询并遍历数据打印控制台(SELECT)

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

public class JDBC_Select {

public static void main(String[] args) throws Exception {

 

JDBCSelect("jdbc:mysql://服务器ip:3306/Web08","root","密码","SELECT * FROM product;");

}

 

public static void JDBCSelect(String url, String username,String password,String sql) throws Exception {

//1:注册驱动

//Class.forName()为发射技术

Class.forName("com.mysql.jdbc.Driver");

//2:获取链接

//调用DriverManager的类方法getConnection(String url, String username,String password)来获取数据库的链接,返回Connection接口对象实现方法

Connection con = DriverManager.getConnection(url, username, password);

//3:获得语句执行平台

//调用Connection接口实现方法createStatement()获取语句执行平台,createStatement()创建一个 Statement 对象来将 SQL 语句发送到数据库

Statement stam = con.createStatement();

//4:执行SQL语句

//调用Statement接口对象实现方法 executeQuery(String sql),执行给定的 SQL 语句,该语句返回单个 ResultSet 对象可以进行SELECT操作,返回值为ResultSet接口对象实现方法

ResultSet rs = stam.executeQuery(sql);

//5:处理结果

//ResultSet接口对象中是实现方法next()可以返回 boolean类型值 true表示读取到数据 false表示没有读取到数据

while(rs.next()) {

//ResultSet接口对象中的实现方法getXXX()方法可以按照列 或者列名来读取数据

System.out.println(rs.getObject("pid")+"  "+rs.getObject("pname")+"  "+rs.getObject("price")+"  "+rs.getObject("pdate"));

}

//6:释放资源

rs.close();

stam.close();

con.close();

}

}

 

1.4 JDBC注入隐患-简单的查询(SELECT)

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

public class Sql_safer {

public static void main(String[] args) throws Exception {

safer();

}

public static void safer() throws Exception {

//1:注册驱动

Class.forName("com.mysql.jdbc.Driver");

//2:获取链接

String url = "jdbc:mysql://服务器ip:3306/Web08";

String user = "root";

String password = "密码";

Connection con = DriverManager.getConnection(url, user, password);

//3:获得语句执行平台

Statement stam = con.createStatement();

//4:执行SQL语句

       //下面这一句SQL语句在查询是会全部查询出来,这个就是SQL的漏洞之一,输出结果会将所有的pidpname全部输出来。

String sql = "SELECT * FROM product WHERE pid=1 AND pname='xx' OR 1=1;";

ResultSet rs = stam.executeQuery(sql);

//5:处理结果

while(rs.next()) {

System.out.println(rs.getObject("pid")+""+rs.getObject("pname"));

}

//6:释放资源

rs.close();

stam.close();

con.close();

}

}

 

1.5 JDBC PreparedStatement预编译防止漏洞

PS:使用PreparedSatement接口的实现方法preparesatement(String sql)对sql语句进行预编译处理可以有效防止漏洞

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

public class PreparedSataementDemo {

public static void main(String[] args) throws Exception{

PreparedstatementDemo(7,"rt");

}

public static void PreparedstatementDemo(int pid,String pname) throws Exception {

// 1:注册驱动

Class.forName("com.mysql.jdbc.Driver");

// 2:获取链接

String url = "jdbc:mysql://服务器ip:3306/Web08";

String user = "root";

String password = "密码";

Connection con = DriverManager.getConnection(url, user, password);

// 3:获得语句执行平台

////调用Statement接口中的子接口PreparedStatement的实现方法prepareStatement(String sql)同时获得语句执行平台 并执行sql语句

// 4:执行SQL语句

//调用Statement接口中的子接口PreparedStatement的实现方法prepareStatement(String sql)对SQL语句进行预编译 返回值为PreparedStatement接口对象

//sql语句中的?为占位符,可以用子接口PreparedStatement的实现方法setxxx()来对占位符进行设置。

String sql = "SELECT * FROM product WHERE pid=? AND pname=?";

PreparedStatement pstam = con.prepareStatement(sql);

pstam.setInt(1, pid);

pstam.setString(2, pname); 

// 5:处理结果

//PreparedStatement接口也有executeQuery()方法 只不过不用在该方法中加入sql语句,这里相当于是对结果的处理,调用他的返回值ResultSet接口对象的实现方法next()和getxxx()实现输出

ResultSet rs = pstam.executeQuery();

if(rs.next()) {

System.out.println(rs.getObject("pid")+""+rs.getObject("pname"));

}else {

System.out.println("用户名或者密码不正确");

}

// 6:释放资源

rs.close();

pstam.close();

con.close();

}

}

 

1.6 JDBC PreparedStatement预编译修改SQL表单内容

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

public class updatePerparedStatement {

public static void main(String[] args) throws Exception {

updatePreparedStatement();

}

public static void updatePreparedStatement() throws Exception {

//1:注册驱动

Class.forName("com.mysql.jdbc.Driver");

//  2:获取链接

String url = "jdbc:mysql://服务器ip:3306/Web08";

String user = "root";

String password = "密码";

Connection con = DriverManager.getConnection(url, user, password);

//3:获得语句执行平台

String sql = "UPDATE product SET pname=?, price=? WHERE pid=?;";

PreparedStatement pstam = con.prepareStatement(sql);

//setObject()为通用的方法,上面的sql语句有3个占位符 所以需要setxxx()3次

pstam.setObject(1,"love you");

pstam.setObject(2, "521");

pstam.setObject(3, 3);

//4:执行SQL语句

//executeUpdate()方法用于sql的update操作,executeQuery()用来执行sql的select、insert,delete操作

int row = pstam.executeUpdate();

//5:处理结果

//6:释放资源

pstam.close();

con.close();

}

}

 

1.7 JDBC PreparedStatement预编译查询SQL表单内容

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

public class PreparedStatementSelect {

public static void main(String[] args) throws Exception {

PreparedStatementSelect();

}

public static void PreparedStatementSelect() throws Exception {

//1:注册驱动

Class.forName("com.mysql.jdbc.Driver");

//2:获取链接

String url = "jdbc:mysql://服务器ip:3306/Web08";

String user = "root";

String password = "密码";

Connection con = DriverManager.getConnection(url, user, password);

//3:获得语句执行平台

String sql = "SELECT * FROM product;";

PreparedStatement pstam = con.prepareStatement(sql);

//4:执行SQL语句

ResultSet rs = pstam.executeQuery();

//5:处理结果

while(rs.next()) {

System.out.println(rs.getObject("pid")+" "+rs.getObject("pname")+" "+rs.getObject("price")+" "+rs.getObject("pdate"));

}

//6:释放资源

rs.close();

pstam.close();

con.close();

}

}

 

1.8 JDBC调用properties配置文件

配置文件入下 一般放置在../src/xxx.properties

driver=com.mysql.jdbc.Driver

url=jdbc:mysql://服务器ip:3306/Web08

username=root

password=密码


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ResourceBundle;

import org.junit.Test;

public class propertiesDemo {

private static String driver;

private static String url;

private static String username;

private static String password;

//静态代码快 调用函数时自动加载

static {

ResourceBundle bundle = ResourceBundle.getBundle("db");

driver = bundle.getString("driver");

url = bundle.getString("url");

username = bundle.getString("username");

password = bundle.getString("password");

}

//2:获取链接

public static void testProperties(){

try {

//1:注册驱动

Class.forName(driver);

//2:获取链接

Connection con = DriverManager.getConnection(url, username, password);

//3:获得语句执行平台

String sql = "SELECT * FROM product WHERE pid=?;";

PreparedStatement pstam = con.prepareStatement(sql);

pstam.setString(1, "p004");

//4:执行SQL语句

ResultSet rs = pstam.executeQuery();

//  5:处理结果

while(rs.next()) {

System.out.println(rs.getString("pname"));

}

//6:释放资源

rs.close();

pstam.close();

con.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}


1.9 JDBC调用读取数据库数据封装在sort类中

配置文件

driver=com.mysql.jdbc.Driver

url=jdbc:mysql://服务器ip:3306/Web08

username=root

password=密码

 

Sort类,用来封装数据库数据 保存在List集合中

package Sortlist;

public class Sort {

private String pid;

private String pname;

private Double price;

private String category_id;

public Sort(String pid, String pname, Double price, String category_id) {

this.pid = pid;

this.pname = pname;

this.price = price;

this.category_id = category_id;

}

public Sort() {}

public String getPid() {

return pid;

}

public void setPid(String pid) {

this.pid = pid;

}

public String getPname() {

return pname;

}

public void setPname(String pname) {

this.pname = pname;

}

public Double getPrice() {

return price;

}

public void setPrice(Double price) {

this.price = price;

}

public String getCategory_id() {

return category_id;

}

public void setCategory_id(String category_id) {

this.category_id = category_id;

}

public String toString() {

return "Sort [pid=" + pid + ", pname=" + pname + ", price=" + price + ", category_id=" + category_id + "]";

}

}

 

JDBC代码将读取的数据封装到sort类中 并保存在Arraylist集合中 增强for遍历输出

package JDBC_Sort;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.ArrayList;

import java.util.List;

import java.util.ResourceBundle;

import Sortlist.Sort;

public class JDBC_Sortlist {

private static String driver;

private static String url;

private static String username;

private static String password;

//静态代码快 调用函数时自动加载配置表内容

static {

ResourceBundle bundle = ResourceBundle.getBundle("db");

driver = bundle.getString("driver");

url = bundle.getString("url");

username = bundle.getString("username");

password = bundle.getString("password");

}

public static void JDBCSort() {

try {

// 1:注册驱动

Class.forName("com.mysql.jdbc.Driver");

// 2:获取链接

Connection con = DriverManager.getConnection(url, username, password);

// 3:获得语句执行平台

PreparedStatement pst = con.prepareStatement("SELECT * FROM product;");

// 4:执行SQL语句

ResultSet rs = pst.executeQuery();

//System.out.println(rs.next());

// 5:处理结果

// 创建Arraylist集合保存Sort对象

List<Sort> list = new ArrayList<Sort>();

while (rs.next()) {

// 调用Sort类的有参构造方法 往Sort对象中出入读取到的结果

Sort s = new Sort(rs.getString("pid"), rs.getString("pname"), rs.getDouble("price"),

rs.getString("category_id"));

// 将读取到的结果添加到Arraylist集合对象list

list.add(s);

}

for (Sort s : list) {

System.out.println(s);

}

rs.close();

pst.close();

con.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

 

Test main函数

package JDBC_Sort;

public class Test {

public static void main(String[] args) {

JDBC_Sortlist.JDBCSort();

}

}

 

加QQ群:764333814(刚成立的新群)免费获取更多资料

猜你喜欢

转载自blog.csdn.net/hujyhfwfh2/article/details/80493935
今日推荐