java与MySQL数据库的连接

假期到了,总结总结一个学期学到的东西,之前碰到了java连接MySQL数据库的问题,现在详细的分享Java连接MySQL数据库的方法。

首先,如果电脑上没安装MySQL数据库的需要先下载的MySQL数据库,推荐下载个xampp,它集合了很多环境,包括PHP,MySQL等,用它的话可免去直接安装MySQL数据库配置一大堆环境的问题。

xampp 下载:点击打开链接

然后选择安装路径直接安装就可以了。打开xampp选择MySQL点击start打开MySQL服务


然后需要下在一个MySQL管理工具,推荐下载Navicat for MySql

下载地址:点击打开链接

然后选择安装路径安装就可以了,打开Navicat for mysql


点击文件->新建连接->MySql,然后填写连接名,我这里就命名为dpf


其他保持默认就行了,然后点击确定,创建连接,然后点击刚刚创建的连接,可以看到有一些数据库,有些是系统的数据库,不要改


右键点击dpf连接,选择新建数据库,自己建个数据库,命名为test1,然后选好字符集,主要是防止出现中文乱码,如下:


可以点击刚刚创建的test1数据库


然后右键表->新建表,创建表,我创建的表如下


这里需要注意的是当创建的栏位是varchar类型的,需要为它添加字符集(utf8)和排序规则(utf8_general_ci),否则会出现中文乱码,然后需要添加栏位就右键,有添加栏位这个选项,然后点击上面的保存按钮保存表,并命个名,我命名为User表


前面讲了数据库部分,接下来就是java连接数据库了

首先得下载个MySQL的jdbc,下载链接: https://pan.baidu.com/s/1kXlAp7p 密码: a3gd

然后打开java编辑器,我用的是intellij(个人觉得intellij比eclipse要好用,可以去官网下载,然后输个注册码就破解了)

然后新建个项目,项目名 temp,建个类,类名SQL然后就是关键了,得把刚刚下载的MySQL的jdbc,即mysql-connector-java-5.1.39-bin.jar,给添加到项目中去,可以点击外部库查看自己是否添加了mysql-connector-java-5.1.39-bin.jar,如果没有添加,那么可以点击左上角的文件(File)->项目结构(Project Structure),然后选择SDKs,如下:


可以点右边的绿色的加号,来添加mysql-connector-java-5.1.39-bin.jar,添加完后点击应用,然后确定就可以了

接下来就可以访问数据库了

首先x写个小栗子,编辑代码:

import java.sql.*;

public class SQL {

public static void main(String[] args){

     String url = "jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8";
     //连接的数据库所在的位置localhost:3306代表的连接位置 本机的3306端口,test1是数据库名,问号后面的是防止中文乱码用的
     String driver = "com.mysql.jdbc.Driver";//通过反射的方式加载驱动
     String userName = "root";//用户名,xampp默认的是root
     String password = "";//密码,默认为空
     Connection connection;//连接用的类
     Statement statement;//静态查询类
     PreparedStatement preparedStatement;//动态查询类,稍后会介绍这两个类的区别
     ResultSet resultSet;//结果集,即保存查询结果
    try {
        Class.forName(driver).newInstance();
        connection = DriverManager.getConnection(url,userName,password);//获得连接
        //添加数据
        statement = connection.createStatement();//创建静态查询
        statement.execute("INSERT INTO User VALUES ('dpf','man')");
        statement.execute("INSERT INTO User VALUES ('daydream','woman')");
        preparedStatement = connection.prepareStatement("INSERT INTO User VALUES (?,?) ");//创建静态查询
        preparedStatement.setString(1,"my");//第一个问号的值
        preparedStatement.setString(2,"man");//第二个问号的值
        preparedStatement.execute();
        //可以看到,静态查询的SQL语句的数据都必须要一一给出,不能是java外面的变量,而动态查询的数据可以用问号占位,然后用setString()方法来指定问号的值,再使用execute()方法来执行SQL语句

        //使用结果集来查询数据
        preparedStatement = connection.prepareStatement("SELECT * FROM User");
        resultSet = preparedStatement.executeQuery();//执行SQL语句并返回个结果集
        //循环打印出结果
        while(resultSet.next()){

            System.out.println(resultSet.getString("name")+" "+resultSet.getString("sex"));


        }

        }
    catch (Exception e){
        e.printStackTrace();

    }



}

}
运行结果:
 
 
可以看到表中插入了数据
 
 
输出结果无误
接下来就是最关心的增删改查了,可以写个数据库类
代码如下:
 
 
/**
 * 邓鹏飞
 * 数据库控制类
 * 化简数据库的操作
 */
class DatabaseModel {

    private String url = "jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8";
    private final static String driver = "com.mysql.jdbc.Driver";
    private String userName = "root";
    private String password = "";
    private Connection connection;
    private Statement statement;//静态查询
    private PreparedStatement preparedStatement;//动态查询
    public DatabaseModel() {

    }
    /*
    链接数据库 使用方法 DatabaseModel data = new Database();
    data.connect()
     */
    public void connect(){
        try {
            Class.forName(driver).newInstance();
            connection = DriverManager.getConnection(url, userName, password);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 
     *
     * 该方法用来执行Sql语句并返回结果集 适合需要返回结果集的查询语句 例如   execResult("select*from user where id = ? and name = ?","1","jack");
     * 用问号占位 然后传入个String数组代表要问号的值 该方法返回个结果集 即 ResultSet
     *
     * @param Sql
     * @param data
     * @return
     * @throws SQLException
     */
    public  ResultSet execResult(String Sql, String... data) throws SQLException {
        preparedStatement = connection.prepareStatement(Sql);
        for (int i = 1; i <= data.length; i++) {
            preparedStatement.setString(i, data[i - 1]);
        }
        return preparedStatement.executeQuery();
    }

    /**
     * 执行Sql语句 不返回任何东西 例如exec("update user set password = ? where account = ?","password","name");
     * exec("delete from user where name = ? and account = ?","name","account");
     * exec("insert into user values(?,?,?,?,?,?,?,?,?)",1,2,3,4,5,6,7,8,9);
     * @param Sql
     * @param data
     * @throws SQLException
     */
    public void exec(String Sql, String...data) throws SQLException {

        preparedStatement = connection.prepareStatement(Sql);
        for (int i = 1; i <= data.length; i++) {
            preparedStatement.setString(i, data[i - 1]);
        }
        preparedStatement.executeUpdate();
    }

    /**
     * 执行静态SQL语句  例如exec("delete from user");
     * @param Sql
     */
    public void exec(String Sql) {
        try
        {
            preparedStatement = connection.prepareStatement(Sql);
            preparedStatement.executeUpdate();
        }catch (Exception e){
        }
    }
    /**
     * 该方法插入个数据  例如insert(表名,要插入的数据(String数组的形式))
     *
     * @param tableName
     * @param data
     * @throws SQLException
     */
    public void insert(String tableName, String... data) throws SQLException {

        String pre = "";
        for (int i = 0; i < data.length; i++) {

            if (i != data.length - 1)
                pre += "?,";
            else
                pre += "?";

        }

        String Sql = "INSERT INTO " + tableName + " VALUES(" + pre + ")";
        preparedStatement = connection.prepareStatement(Sql);
        for (int i = 1; i <= data.length; i++) {

            preparedStatement.setString(i, data[i - 1]);

        }
        preparedStatement.executeUpdate();

    }

    /**
     * 该方法删除表数据 例如delete(表名,删除时的条件(例如"id = ? AND name = ?"),传入问号代表的值)
     *
     * @param tableName
     * @param condition
     * @param data
     * @throws SQLException
     */
    public void delete(String tableName, String condition, String... data) throws SQLException {


        String Sql = "DELETE FROM " + tableName + " WHERE " + condition;


        preparedStatement = connection.prepareStatement(Sql);
        for (int i = 1; i <= data.length; i++) {

            preparedStatement.setString(i, data[i - 1]);


        }
        preparedStatement.executeUpdate();


    }

    /**
     *
     * @param tableName
     * @param target
     * @param condition
     * @param data
     * @throws SQLException
     */
    public void update(String tableName, String target, String condition, String data[]) throws SQLException {
        String Sql = "UPDATE " + tableName + " SET " + target + " WHERE " + condition;
        preparedStatement = connection.prepareStatement(Sql);

        for (int i = 1; i <= data.length; i++) {

            preparedStatement.setString(i, data[i - 1]);

        }
        preparedStatement.executeUpdate();

    }

    /**
     * 查询
     * @param Sql
     * @return
     * @throws SQLException
     */
    public ResultSet select(String Sql) throws SQLException {

        statement = connection.createStatement();
        return statement.executeQuery(Sql);


    }

    /**
     * 查询
     * @param Sql
     * @param data
     * @return
     * @throws SQLException
     */
    public ResultSet select(String Sql, String... data) throws SQLException {


        preparedStatement = connection.prepareStatement(Sql);
        for (int i = 1; i <= data.length; i++) {

            preparedStatement.setString(i, data[i - 1]);
        }
        return preparedStatement.executeQuery();

    }
    /**
     * 得到静态查询对象
     * @return
     */
    public Statement getStatement() {
        return statement;
    }

    /**
     * 得到动态查询对象
     * @return
     */
    public PreparedStatement getPreparedStatement() {
        return preparedStatement;
    }

    /**
     * 得到数据库链接对象
     * @return
     */
    public Connection getConnection() {
        return connection;
    }

    /**
     * 数据库重连
     * @param Url
     * @param UserName
     * @param Password
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    public void reConnection(String Url, String UserName, String Password) throws ClassNotFoundException, SQLException {

        Class.forName(driver);
        connection = DriverManager.getConnection(Url, UserName, Password);

    }


}
其实就是使用SQL语句而已,可以网上查查一些SQL语句的用法,比如insert,delete,update,select,with,in,not in,natural join,join...on,group by,having,sum,max,min,avg等等数据库的关键字用法
本人现在才上大二,有很多东西说的可能不太对,望大牛指点 。
 
 


猜你喜欢

转载自blog.csdn.net/daydream13580130043/article/details/79063109
今日推荐