假期到了,总结总结一个学期学到的东西,之前碰到了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等等数据库的关键字用法本人现在才上大二,有很多东西说的可能不太对,望大牛指点 。