//动态库和普通进程调用数据库方式没有任何区别,以下的程序兼容WINDOWS ODBC数据库连接和LINUX MYSQL连接,是跨平台的。
#ifdef WIN32
#include <windowsh>
#include <odbcinsth>
#include <sqlexth>
#else
#include <mysqlh>
#include <unistdh>
#define SQLHANDLE static MYSQL
#endif
#include <stdargh>
#include <stdlibh>
#include <stdioh>
#include <stringh>
SQLHANDLE hDBEnv, hDBC;
int DB_Open(char dbcn, char usr, char pwd)
{
int r;
#ifdef WIN32
r = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hDBEnv);
if(r) return 0;
r = SQLSetEnvAttr(hDBEnv,SQL_ATTR_ODBC_VERSION,
(void)SQL_OV_ODBC3,0);
if(r) return 0;
r = SQLAllocHandle(SQL_HANDLE_DBC, hDBEnv, &hDBC);
if(r) return 0;
r = SQLConnect(hDBC,
(unsigned char )dbcn, strlen(dbcn),
(unsigned char )usr, strlen(usr),
(unsigned char )pwd, strlen(pwd));
return r==SQL_SUCCESS || r==SQL_SUCCESS_WITH_INFO;
#else
mysql_init(&hDBC);
MYSQL rx = mysql_real_connect(
&hDBC, dbcn, usr, pwd, NULL, 0, NULL, 0);
if(!rx) return 0;
return 1;
#endif
}//end DB_Open
int DB_Exec(char sql)
{
#ifdef WIN32
SQLHANDLE hStatement = NULL;
SQLAllocHandle(SQL_HANDLE_STMT, hDBC, &hStatement);
SQLExecDirect(hStatement,(unsigned char )sql, strlen(sql));
SQLCloseCursor(hStatement);
SQLFreeHandle(SQL_HANDLE_STMT, hStatement);
hStatement = NULL;
#else
mysql_real_query (&hDBC, sql, strlen(sql));
#endif
return 1;
}//end DB_Exec
int DB_Close(void)
{
#ifdef WIN32
SQLDisconnect(hDBC);
SQLFreeHandle(SQL_HANDLE_DBC, hDBC);
SQLFreeHandle(SQL_HANDLE_ENV, hDBEnv);
#else
mysql_close(&hDBC);
#endif
return 1;
}//DB_Close()
#ifndef WIN32
typedef struct tagMySQLRecordset {
MYSQL_RES hRecord;
void row;
int size;
int cols;
} MYSQLRecordset;
使用JDBC进行数据库的增删改查 *** 作1下载Microsoft SQL Server 2005 JDBC 驱动包jar文件 将jar文件引入工程中2封装数据库链接的获取和关闭 *** 作import javasql;public class BaseDao {
/
数据库驱动类的字符串,完整的包名加类名 在工程中查看添加的jar文件 能看到这个类
/
private static final String DRIVE = "commicrosoftsqlserverjdbcSQLServerDriver"; /
数据库连接地址
DataBaseName=数据库名称 其它固定
/
private static final String URL = "jdbc:sqlserver://localhost:1433;DataBaseName=bbs"; /
连接数据库的用户名
/
private static final String USER = "sa"; /
用户密码
/
private static final String PASSWORD = ""; /
获取连接 异常直接抛出 或者捕获后自定义异常信息再抛出
/
public static Connection getConnection() throws Exception {
ClassforName(DRIVE);
return DriverManagergetConnection(URL, USER, PASSWORD);
} /
关闭与数据库的连接 释放资源
/
public static void closeAll(ResultSet resultSet, PreparedStatement pst,
Connection connection) throws Exception {
if (resultSet != null)
resultSetclose();
if (pst != null)
pstclose();
if (connection != null)
connectionclose();
}}3创建图书的实体类public class Book {
/
数据库主键
/
private Long id; /
作者
/
private String author; /
书名
/
private String name;
/
默认构造
/
public Book() {
}
/
全字段构造
@param id
@param author
@param name
/
public Book(Long id, String author, String name) {
thisid = id;
thisauthor = author;
thisname = name;
}
/
以下为读写属性的方法
@return
/
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
thisauthor = author;
}
public Long getId() {
return id;
}
public void setId(Long id) {
thisid = id;
}
public String getName() {
return name;
}
public void setName(String name) {
thisname = name;
}
}
4创建与图书表交互的工具类import javasqlConnection;
import javasqlPreparedStatement;
import javasqlResultSet;
import javautilArrayList;
import javautilList;public class BookDao {
/
添加新书
@param book 要添加入数据库的图书 作者 书名 必须给定
/
public void addBook(Book book) throws Exception {
// 连接
Connection connection = null;
// 执行语句
PreparedStatement pst = null;
try {
connection = BaseDaogetConnection();
// 构造执行语句
String sql = "insert into book values(" + bookgetAuthor() + ","
+ bookgetName() + ")";
pst = connectionprepareStatement(sql);
pstexecuteUpdate(); } catch (Exception e) {
// 抛出异常
throw e;
} finally {
// 无论是否异常 均关闭数据库
BaseDaocloseAll(null, pst, connection);
}
} /
查询所有书籍列表
/
public List<Book> getBooks() throws Exception {
// 用于存放查寻结果的集合
List<Book> books = new ArrayList<Book>();
// 连接
Connection connection = null;
// 执行语句
PreparedStatement pst = null;
// 查询结果
ResultSet resultSet = null;
try {
connection = BaseDaogetConnection();
// 构造查询语句
String sql = "select from book";
pst = connectionprepareStatement(sql);
resultSet = pstexecuteQuery(); // 循环读取查询结果行
while (resultSetnext()) {
// getXXX的参数为数据表列名
Book book = new Book(resultSetgetLong("id"), resultSet
getString("author"), resultSetgetString("name"));
// 将封装好的图书对象存入集合
booksadd(book);
}
} catch (Exception e) {
// 抛出异常
throw e;
} finally {
// 无论是否异常 均关闭数据库
BaseDaocloseAll(resultSet, pst, connection);
}
// 返回查询结果
return books;
}/其它方法类似上面 只是语句不同/
}当然 以上只是简单的封装 初学者可以在理解以上代码的基础上 进行更高级的封装
5使用BookDao添加书籍和获取所有书籍列表import javautilList;/
测试类
@author Administrator
/
public class Test { /
@param args
@throws Exception
/
public static void main(String[] args) throws Exception {
//创建工具类对象
BookDao dao = new BookDao();
//创建一本图书
Book book = new Book(null,"QQ:495691293","编程菜鸟");
//添加书籍到数据库
daoaddBook(book);
//获取所有图书列表
List<Book> books = daogetBooks();
//输出结果
for (Book b : books) {
Systemoutprintln(bgetId()+"\t"+bgetAuthor()+"\t"+bgetName());
}
}}
以上就是关于怎样实现在程序中动态的连接数据库全部的内容,包括:怎样实现在程序中动态的连接数据库、java中如何实现登录界面与数据库正确连接、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)