/************************************************************
声明:如需转载,请注明出处!
************************************************************/
在我的 MySQL 系列博客里面,分享过如何使用 jdbc 连接 mysql 数据库。
点击这里,查看详情。
如果耐心将那篇博客的例子,自己动手实践一下,那麽这篇博客会很快让你喜欢。
如果想远程连接 mysql,需要记住:mysql 允许被远程访问。
1. 启动 MySql
sudo /etc/init.d/mysql.server start
mysql -u root -p
2. 增加一个用户
use mysql(mysql 是自带的数据库文件,里面有张表 user)
执行下面的两条命令:
解释:
grant all privileges on *.* to 'mark' @'%' identified by '123456';
授予用户 mark,密码 123456,可以使用任意 ip (%)访问任何数据库(*.*) .
查看表中数据:
可以看出 mark 这个用户创建了。
password 是被加密了的。host 为 % 表示通配任意 ip(ipv4)。
3. 命令行验证
ctrl + c 停止 mysql 交互模式
ifconfig 查看本机的 ip:192.168.1.102
mysql -h 192.168.1.102 -umark -p123456
如果进入交互模式,就 ok.
新建一个数据库文件 mydb 和表 mytable:
4. jdbc
eclipse --- New java project
注意:
要将 jdbc(connector-java-5.1.6-bin.jar 版本) 的 jar 文件 Build path 到这个项目。
MySqlUtil.java
package net.mark.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class MySqlUtil { public static Connection openConnection(String url, String user, String password) { Connection conn = null; try { final String DRIVER_NAME = "com.mysql.jdbc.Driver"; Class.forName(DRIVER_NAME); conn = DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException e) { conn = null; } catch (SQLException e) { conn = null; } return conn; } public static void query(Connection conn, String sql) { if (conn == null) { return; } Statement statement = null; ResultSet result = null; try { statement = conn.createStatement(); result = statement.executeQuery(sql); if (result != null && result.first()) { int idColumnIndex = result.findColumn("id"); int nameColumnIndex = result.findColumn("name"); while (!result.isAfterLast()) { System.out.println("------------------"); System.out.print("id " + result.getString(idColumnIndex) + "\t"); System.out .println("name " + result.getString(nameColumnIndex)); result.next(); } } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (result != null) { result.close(); result = null; } if (statement != null) { statement.close(); statement = null; } } catch (SQLException sqle) { } } } public static boolean execSQL(Connection conn, String sql) { boolean execResult = false; if (conn == null) { return execResult; } Statement statement = null; try { statement = conn.createStatement(); if (statement != null) { execResult = statement.execute(sql); } } catch (SQLException e) { execResult = false; } return execResult; } }
Main.java
package net.mark; import java.sql.Connection; import net.mark.util.MySqlUtil; public class Main { private static final String URL = "jdbc:mysql://192.168.1.102/mydb"; private static final String USER = "mark"; private static final String PASSWORD = "123456"; public static void main(String[] args) throws Exception { Connection conn = MySqlUtil.openConnection(URL, USER, PASSWORD); System.out.println("All users info:"); MySqlUtil.query(conn, "select * from mytable"); } }
Run as java application:
还可以插入、删除或者更新数据:
package net.mark; import java.sql.Connection; import net.mark.util.MySqlUtil; public class Main { private static final String URL = "jdbc:mysql://192.168.1.102/mydb"; private static final String USER = "mark"; private static final String PASSWORD = "123456"; public static void main(String[] args) throws Exception { Connection conn = MySqlUtil.openConnection(URL, USER, PASSWORD); System.out.println("All users info:"); MySqlUtil.execSQL(conn, "insert into mytable values(56,'小李')"); MySqlUtil.execSQL(conn, "update mytable set name='mark' where id=1"); MySqlUtil.execSQL(conn, "delete from mytable where id=6"); MySqlUtil.query(conn, "select * from mytable"); } }
上面的访问是基于局域网通过 jdbc 操作 mysql。
远程访问 mysql,采用上面的方式也是可以的,但是速度不是很快。