怎样实现在程序中动态的连接数据库

怎样实现在程序中动态的连接数据库,第1张

//动态库和普通进程调用数据库方式没有任何区别,以下的程序兼容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中如何实现登录界面与数据库正确连接、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9310729.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存