赞
踩
目录
JDBC:Java Database Connectivity 是一个独立于特定数据库管理系统,通用的 SQL 数据库存取和操作的公共接口,定义了一组标准,为访问不同的数据库提供了统一的途径。
JDBC 支持多种数据库,连通 Java 程序和数据库
1、加载驱动,也就是数据库厂商提供的 jar 包,Java 程序和数据库的桥梁
2、创建 Connection 对象,连接 Mysql 数据库
3、创建 Statement 对象,由 Connection 产生,执行 SQL 语句
4、创建 ResultSet 对象,用来保存 Statement 执行后所产生的结果,将数据库记录映射成 Java 对象
在项目中创建文件夹 libs (文件夹名字可以随意,并且也不一定需要创建文件夹,只是习惯而且比较规范),将 jar 包复制到文件夹中
然后右键 jar 包,选择 ”添加为库“。
或者选择 ”文件“ -> ”项目结构“
选择 ”库“,点击 ”+“ 号,选择 ”java“,然后导入刚刚复制到项目的 jar 包
然后点击确定即可。
具体代码如下:
其中:serverTimezone=GMT%2B8 是用来消除时差。characterEncoding=utf8 是用来修改 java 程序与数据库数据连接时候的编码格式。
- package com.mingfa.util;
-
- import java.sql.*;
-
- public class JDBCUtil {
-
- /**
- * 创建连接
- * return 连接实例
- */
- public static Connection getConnection(){
- //加载驱动
- Connection connection = null;
- Statement statement = null;
- ResultSet resultSet = null;
- try {
- Class.forName("com.mysql.cj.jdbc.Driver");
- //创建连接
- String url = "jdbc:mysql://localhost:3306/test1?serverTimezone=GMT%2B8&characterEncoding=utf8";
- String user = "root";
- String pwd = "000914";
- connection = DriverManager.getConnection(url, user, pwd);
- } catch (Exception e){
- e.printStackTrace();
- }
- return connection;
- }
-
- /**
- * 释放资源
- */
- public static void release(Connection connection,Statement statement,ResultSet resultSet){
- try {
- if(connection != null) connection.close();
- if(statement != null) statement.close();
- if(resultSet != null) resultSet.close();
- } catch (SQLException throwables) {
- throwables.printStackTrace();
- }
- }
-
- }
- package com.mingfa.test;
-
- import com.mingfa.entity.Account;
- import com.mingfa.util.JDBCUtil;
-
- import java.sql.*;
-
- public class Test {
- public static void main(String[] args) {
- delete(123);//删除
- update(123, "JDBC");//修改
- add("MySQL");//增加
- query();//查询
- }
-
- //删除
- public static void delete(Integer id){
- Connection connection = null;
- Statement statement = null;
- ResultSet resultSet = null;
- try {
- connection = JDBCUtil.getConnection();//得到数据库的连接
- //定义SQL语句
- String sql = "delete from account where id = "+id;
- //执行SQL
- statement = connection.createStatement();
- int i = statement.executeUpdate(sql);//受影响行数
- System.out.println(i);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- //释放资源
- JDBCUtil.release(connection, statement, resultSet);
- }
- }
-
- //修改
- public static void update(Integer id,String name){
- Connection connection = null;
- Statement statement = null;
- ResultSet resultSet = null;
- try {
- connection = JDBCUtil.getConnection();//得到数据库的连接
- //定义SQL语句
- String sql = "update account set name = '"+ name +"' where id = "+id;
- //执行SQL
- statement = connection.createStatement();
- int i = statement.executeUpdate(sql);//受影响行数
- System.out.println(i);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- //释放资源
- JDBCUtil.release(connection, statement, resultSet);
- }
- }
-
- //添加
- public static void add(String name){
- Connection connection = null;
- Statement statement = null;
- ResultSet resultSet = null;
- try {
- connection = JDBCUtil.getConnection();//得到数据库的连接
- //定义SQL语句
- String sql = "insert into account(name) values ('"+ name +"')";
- //执行SQL
- statement = connection.createStatement();
- int i = statement.executeUpdate(sql);//受影响行数
- System.out.println(i);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- //释放资源
- JDBCUtil.release(connection, statement, resultSet);
- }
- }
-
- //查询
- public static void query(){
- Connection connection = null;
- Statement statement = null;
- ResultSet resultSet = null;
- try {
- connection = JDBCUtil.getConnection();//得到数据库的连接
- //定义SQL语句
- String sql = "select * from account;";
- //执行SQL
- statement = connection.createStatement();
- resultSet = statement.executeQuery(sql);
- //遍历集合
- while (resultSet.next()) {
- int anInt = resultSet.getInt("id");//这里的信息需要与数据库中对应列的信息一致,包括数据类型,列名。例如 int 类型,列名为 id。
- String string = resultSet.getString("name");//这里的信息需要与数据库中对应列的信息一致,包括数据类型,列名。例如 varchar 类型,列名为 name。
- Account account = new Account(anInt, string);
- System.out.println(account);
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- //释放资源
- JDBCUtil.release(connection, statement, resultSet);
- }
- }
- }
利用 PreparedStatement 进行数据库语言的建立,可以提高程序与数据库交互时候的安全性,防止发生 sql 注入
eq:数据库的查询操作,其他操作是类似的,读者可以自己模仿
- public static void login(String name,String pwd){
- Connection connection = null;
- PreparedStatement statement = null;
- ResultSet resultSet = null;
- try {
- connection = JDBCUtil.getConnection();
- //定义SQL语句
- String sql = "select * from user where name = ? and pwd = ?";
- //执行SQL
- statement = connection.prepareStatement(sql);
- //其中 1 代表 上述 sql 语句的第一个 ? ,同理,2代表第二个
- statement.setString(1, name);//name 为我们输入的参数,代表我们想要找到的数据
- statement.setString(2, pwd);//pwd 同上
- resultSet = statement.executeQuery();
- if (resultSet.next()) System.out.println("登录成功");
- else System.out.println("登录失败");
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- JDBCUtil.release(connection, statement, resultSet);
- }
- }
报错提示为:报错Incorrect string value: ‘\xE5\xAD\x99\xE4\xBD\xB3...‘ for column ‘name‘ at row 1
或者数据库中中文显示 ??
原因可能是:
1、java 连接数据库的时候连接方式的编码格式问题。
解决方法:在url中加入 characterEncoding=utf8 即可。
eq:"jdbc:mysql://localhost:3306/test1?characterEncoding=utf8"。
2、在创建数据库或者数据表的时候选择了默认的编码格式,没有设置utf8。
解决方法:
若数据表还没有创建,则创建的时候加上 default charset = utf8;
eq:
若数据库还没有创建,则创建的时候也同样加上 default charset = utf8; 即可。
若已经创建,则通过如下代码进行修改编码格式:
- alter database test character set utf8;
- alter table account2 character set utf8;
- alter table account2 change name name varchar(10) character set utf8;
其中 test 为数据库名、account2 为数据表名、name 为数据表中的列名。
报错提示为:java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized
解决方法:在url中加入 serverTimezone=GMT%2B8
eq:"jdbc:mysql://localhost:3306/test1?serverTimezone=GMT%2B8"
使用错误的密码,或者不适用账号密码也同样可以登录数据库或者连接数据库。
解决方法:
1、进入 mysql 的 bin 目录,在搜索框中输入 cmd 。或者通过 cmd 的 cd 指令跳转到 mysql 的 bin 目录也可以。
2、登录 mysql
3、输入 select * from mysql.user where user=' '; 进行查询,查看当前的数据
4、删除空用户名:use mysql; delete from user where user = ' ';
5、重载权限表 flush privileges;
6、重启服务 service mysqld restart
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。