以前用过一些,但总觉得不好用,老容易出错,于是自己在写程序的过程中总结经验,反复修改,写了这一个标准操作,于是mysql用起来终于顺手了
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* MySQL操作类
*
* @author Administrator
*
*/
public class MySQL {
private Connection conn = null;
private Statement stat;
private String connectionString;
private String driver = "org.gjt.mm.mysql.Driver";
/**
* 构造函数
*
* @param connString
* 连接字符串
*/
public MySQL(String connString) {
this.connectionString = connString;
try {
Class.forName(driver);
conn = DriverManager.getConnection(this.connectionString);
} catch (ClassNotFoundException e) {
System.out.println("Class Not Founde=!");
System.out.println("Error : " + e.toString());
} catch (SQLException e) {
System.out.println("Sql Exception!");
System.out.println("Exception : " + e.toString());
}
}
/**
* 构造函数
*
* @param server
* @param port
* @param dbname
* @param user
* @param pass
*/
public MySQL(String server, String port, String dbname, String user,
String pass) {
String connString = "jdbc:mysql://" + server + ":" + port + "/"
+ dbname + "?user=" + user + "&password=" + pass
+ "&useUnicode=true&characterEncoding=UTF-8";
this.connectionString = connString;
try {
Class.forName(driver);
conn = DriverManager.getConnection(this.connectionString);
} catch (ClassNotFoundException e) {
System.out.println("Class Not Founde=!");
System.out.println("Error : " + e.toString());
} catch (SQLException e) {
System.out.println("Sql Exception!");
System.out.println("Exception : " + e.toString());
}
}
/**
* 获得连接
*
* @return
*/
public Connection getConnection() {
return conn;
}
/*
* 关闭连接
*/
public void close() {
try {
if (this.stat != null) {
this.stat.close();
}
if (this.conn != null) {
this.conn.close();
}
} catch (SQLException e) {
System.out.println("Close DB Exception!");
System.out.println("Error : " + e.toString());
}
}
/**
* 执行查询SQL语句
*
* @param sql
* @return
*/
public ResultSet executeQuery(String sql) {
try {
this.stat = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
return this.stat.executeQuery(sql);
} catch (SQLException e) {
System.out.println("Query Sql Exception!");
System.out.println("Error : " + e.toString());
}
return null;
}
/**
* 执行更新语句
*
* @param sql
*/
public void executeUpdate(String sql) {
try {
this.stat = conn.createStatement();
this.stat.executeUpdate(sql);
} catch (SQLException e) {
if (!(e.getMessage().split(" ")[0].equals("Duplicate"))) {
System.out.println("Update Sql Exception!");
System.out.println("Exception : " + e.toString());
}
}
}
}
dbo类:
我把MySql的标准操作放在上面的MySQL类中,在程序中具体的查询封装在DBO类中,意为数据库操作类(database operations),把程序的对数据库的调用和mysql的基本操作分开,目的使得程序的思路清晰,同时方便调试,也利于代码的复用
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
/**
*
* @author Marin3000
*
*/
public class DBO {
private MySQL db;
/**
* 构造函数,读取配置文件
*/
public DBO() {
String server = "127.0.0.1";
String port = "3306";
String dbname = "users";
String user = "root";
String pass = "password";
this.db = new MySQL(server, port, dbname, user, pass);
}
/**
* 关闭数据库操作
*/
public void close() {
this.db.close();
}
/**
* Select 操作范例
*
* @param status
* @return
*/
public ArrayList<String> getUsers(int status) {
ArrayList<String> result = new ArrayList<String>();
try {
String sql = "SELECT * FROM users WHERE enable=" + status;
ResultSet rs = this.db.executeQuery(sql);
while (rs.next()) {
String name = rs.getString("name");
result.add(name);
}
// 注意rs使用完后要记得关闭,否则会在多次操作后占用大量内存,然后java虚拟机就会报内存不够错误而停止,切记
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
/**
* Insert 操作范例
*
* @param name
* @param id
*/
public void saveUser(String name, String email) {
String sql = "INSERT INTO users (name,email) VALUES('" + name + "','"
+ email + "' ) ";
this.db.executeUpdate(sql);
}
/**
* Update 操作范例
*
* @param id
* @param status
*/
public void saveStatus(int id, int status) {
String sql = "UPDATE users SET enable=" + status + " WHERE id=" + id;
this.db.executeUpdate(sql);
}
/**
* 获得指定表的长度
*
* @param tableName
* @return
*/
public int getTableLength(String tableName) {
int length = 0;
try {
String sql = "select count(*) from " + tableName;
ResultSet rs = this.db.executeQuery(sql);
rs.next();
length = rs.getInt("count(*)");
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
return length;
}
}
其实在我写的代码中,最初是把Mysql的连接写在程序里,如上面的构造方法中,后来由于不方便修改,比如服务器换ip。换密码之类的,又要重新改写源码,后来就另写了一个类来读写XML文件,所有的Mysql连接的参数自然就放在了XML文件中,这样以后要修改就方便多了,然后上面的构造函数就变成了这样,具体读取XML文件的方法参见我的另一篇博客 java读取XML配置文件
/**
* 构造函数,读取配置文件
*/
public DBO() {
Config conf = XMLReader.loadconfig();
this.db = new MySQL(conf.getConnString());
}
调用的类
这样把mysql的基本操作和具体程序的操作分成两个类后,代码就变得清晰易懂,需要增加新的方法,就在DBO类中增加就可以,方便又不易出错
/**
*
* @author Martin3000
*
*
*/
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
DBO dbo = new DBO();
int length = dbo.getTableLength("users");
dbo.saveUser("martin", "martin.nclab@gmail.com");
dbo.close();
}
}
分享到:
相关推荐
mysql操作类
PHP MYSQL操作类 PHP_DataSet
(1)在需要调用mysql操作类的窗口头文件*.h中引入mysql头文件:#include "mysql.h" (2)在需要调用mysql操作类的窗口头文件*.h中声明mysql对象指针: public: mysql *db; (3)在需要调用mysql操作类的窗口...
java mysql 操作类 用面向对象的思路封装大部分mysql的操作
对MySQL的各种操作进行了封装,工程中只需要调用相应的接口即可。
PHP MYSQL 操作类
MYSQL ADO操作类,模板化连接池,可增加或替换数据库类型
比较方便的一个类,分享了 比较适合初中级开发人员,比较实用
我仿照php的mysqli扩展自己使用MySQL的C Interface实现了一个简单的mysql操作类。这个类可以帮助我更方便地与MySQL数据库进行交互,并且让我更好地理解底层的操作原理。基于这个类,我写了一个简单的字符统计测试...
介绍一个简单的php-mysql操作类,数据库连接和设置,执行操作,显示信息,取得数据集的某个值,取得数据集的某个值,取得数据集的行数,循环读取数据,最后一次插入纪录的id值,插入任意数据,修改数据,删除数据,...
C++编写的MySql操作类(源码),是“忽悠张”写的东东,跑了一下,能够满足基本的MYSQL操作.如果对写服务器有兴趣可以看看这个博客:www.doserver.com
一款比较全的mysql操作类,这个是一款包括数据查询,更新,删除,等操作,有需要的小伙伴可以下载学习和参考,也可以自己进行修改操作,达到自己的目的。
这个是连接.net 连接mysql的操作类,希望大家用得上,也是自己好不容易找到的
理想的mysql操作类,网上找了很久,建议下载参考
最近用到Python操作数据库,MySql的操作封装类,简单写了一个Mysql封装操作类,分享一下,需要安装pymsql,安装方法:https://blog.csdn.net/sinat_28984567/article/details/105316092
新手学习,php7中mysql数据库操作类实例,非常清晰易懂
介绍一个不错的PHP mysql操作类,SQL执行后的数据保存变量,读取一条数据并把数据往后移一位,如果数据为空则返回为null,更新数据库里面的数据,$t为表名,$v格式为数组格式,上标为字段名,下标为数据;$w为条件上标...
浅谈PHP值mysql操作类_.docx
Mysql操作类,含常用数据库处理功能,用VC编写
用mysql有关C语言的API函数封装了自己的mysql操作类,包括了所有常用的功能,使用简单方便,包含使用说明和实例程序。