Java中mysql—JDBC的使用详解
一、环境介绍
在mysql中创建一个库shen,并创建user表和插入表的数据。
新建一个Java工程jdbc,并导入数据驱动。
下载:mysql-connector-java-8.0.23.jar
二、详细步骤
1、加载数据库驱动
//1.加载驱动(开发推荐的方式)
Class.forName("com.mysql.jdbc.Driver");
2、建立连接
1、数据库URL
URL用于标识数据库的位置,程序员通过URL地址告诉JDBC程序连接哪个数据库,URL的写法为:
jdbc:mysql:[]//localhost:3306/shen ?参数名:参数值
常用数据库URL地址的写法:
Oracle:jdbc:oracle:thin:@localhost:1521:shen
MySql:jdbc:mysql://localhost:3306/shen
2、Connection
Jdbc程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的,创建方法为:
**
Connection conn = DriverManager.getConnection(url,user,pass);
**
String url = "jdbc:mysql://localhost:3306/book";//book数据库名
String username = "root";//mysql 用户名
String password = "123456";//mtsql 密码
Connection conn = null;
//2.获取与数据库的链接
conn = DriverManager.getConnection(url, username, password);
3、执行SQL语句
1、Statement
Jdbc程序中的Statement对象用于向数据库发送SQL语句,创建方法为:
**Statement st = conn.createStatement();**
Statement st = null;
//3.获取用于向数据库发送sql语句的statement
st = conn.createStatement();
//4.向数据库发sql
String sql = "select id,name,password,email,birthday from users";
st.executeQuery(sql);
2、PreperedStatement
PreperedStatement是Statement的孩子,它的实例对象可以通过调用:
**PreperedStatement st = conn.preparedStatement()**
PreperedStatement st = null;
String sql = "select * from users where name=? and password=?";
//3.获取用于向数据库发送sql语句的Preperedstatement
st = conn.preparedStatement(sql);//在此次传入,进行预编译
st.setString(1, username);
st.setString(2, password);
//4.向数据库发sql
st.executeQuery();//在这里不需要传入sql
比较:相对于Statement对象而言
PreperedStatement可以避免SQL注入的问题。
如:String sql=“select * from admin where loginname=’”+loginName+"’ and loginpwd=’"+loginPwd+"’";
在应用中:
-》请输入账号:
333
-》请输入密码:
wer’or’1’='1
实际上发送:select * from admin where loginname='333' and loginpwd='wer'or'1'='1',登录成功!
Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement 可对SQL进行预编译,从而提高数据库的执行效率。
并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。
4、获取结果
- Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式,ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
1、获取行
ResultSet提供了对结果集进行滚动的方法:
next():移动到下一行
Previous():移动到前一行
absolute(int row):移动到指定行
beforeFirst():移动resultSet的最前面。
afterLast() :移动到resultSet的最后面。
2、获取值
ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:
获取任意类型的数据
getObject(int index)
getObject(string columnName)
获取指定类型的数据,例如:
getString(int index)
getString(String columnName)
Connection connection = DriverManager.getConnection
(url, user, password);
try {
String sql = "select * from work ";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
int id = resultSet.getInt("wid");
String name = resultSet.getString(2);
String sex = resultSet.getString(3);
Date date = resultSet.getDate(4);
Double salary = resultSet.getDouble(5);
String address = resultSet.getString(6);
//注意这里的方法重载可以通过字段也可以通过index
System.out.println(id + "-" + name + "-" + sex + "-" + date + "-"
+ salary + "-" + address);
}
} catch (SQLException e) {
e.printStackTrace();
}
完整代码:
public static void main(String[] args) throws Exception {
Connection con;
//jdbc驱动
String driver = "com.mysql.cj.jdbc.Driver";
//这里我的数据库是cxxt
String url = "jdbc:mysql://localhost:3306/j11?&useSSL=false&serverTimezone=UTC";
String user = "root";
String password = "19990507";
try {
//注册JDBC驱动程序
Class.forName(driver);
//建立连接
con = DriverManager.getConnection(url, user, password);
if (!con.isClosed()) {
System.out.println("数据库连接成功");
}
con.close();
} catch (ClassNotFoundException e) {
System.out.println("数据库驱动没有安装");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("数据库连接失败");
}
Connection connection = DriverManager.getConnection(url, user, password);
// // *添加语句
// String sql = "insert into work values(6,'张三','男',now(),16500,'武汉')";
// Statement statement = connection.createStatement();
// statement.executeUpdate(sql);
/*更新语句
String sql = "update student set name = '李四';
Statement statement = connection.createStatement();
statement.executeUpdate(sql);*/
/*删除语句
String sql = "delete from student";
Statement statement = connection.createStatement();
statement.executeUpdate(sql);
*/
try {
String sql = "select * from work ";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
int id = resultSet.getInt("wid");
String name = resultSet.getString(2);
String sex = resultSet.getString(3);
Date date = resultSet.getDate(4);
Double salary = resultSet.getDouble(5);
String address = resultSet.getString(6);
//注意这里的方法重载可以通过字段也可以通过index
System.out.println(id + "-" + name + "-" + sex + "-" + date + "-"
+ salary + "-" + address);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
转载
https://blog.csdn.net/qq_22172133/article/details/81266048/?ops_request_misc=&request_id=&biz_id=102&utm_term=jdbc%20%E7%9A%84%E6%93%8D%E4%BD%9C&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-3-81266048.first_rank_v2_pc_rank_v29&spm=1018.2226.3001.4187