连接数据库的方法总结

连接数据库的方法总结

一、使用ODBC连接数据库

1、创建odbc数据源
打开控制面板->管理工具->odbc数据源(分为32位和64位,根据数据源的平台类型确定),打开后的数据源管理程序如下图所示。
odbc数据源程序界面
2、选择添加按钮,弹出创建数据源对话框,选择待创建数据源的驱动程序,点击完成进入下一步。如果要连接MS SQL server数据库,选择的驱动程序为SQL server;如果要连接MySQL数据库,选择MySQL ODBC [版本号] ANSI Driver或MySQL ODBC [版本号] Unicode Driver;如果要连接Access数据库,选择的驱动程序为Microsoft Access Driver。在这里插入图片描述
3、根据选择的数据源的不同,进入不同向导,填写数据源名称、描述、数据库的账号、密码、数据源名称或数据库文件等信息。
3.1、如果要连接SQL server数据库,向导程序如下图所示。填写数据源名称、数据源描述(选填)、所要连接的服务器名称(如果服务器名称没有出现在下拉菜单中,就自己直接输入),点击下一步。
在这里插入图片描述
一般选择”使用用户输入登录Id和密码的SQL server验证“,填写登录ID和密码,点击进入下一步,注意保证数据库打开状态,否则会导致数据源配置失败。
在这里插入图片描述
根据需要可以设置默认数据库,其他选项一般不做更改,点击进入下一步。
在这里插入图片描述
根据需要设置语言、加密、翻译、国际化,然后点击完成。
在这里插入图片描述
点击测试数据源,正常情况下会提示测试成功,接着一路点击确认保存修改,退出数据源管理程序。
在这里插入图片描述
3.2、如果要连接的是MySQL数据库,进入的界面如下图所示。填写数据源名称、数据源描述、选择TCP/IP,Server处一般先填写localhost进行测试,端口一般选择默认端口3306,然后填写用户名、密码和数据库,点击Test验证连接是否成功,注意保证数据库处于打开状态。在Details中可以进行更详细的设置,有兴趣的自行了解。点击Ok完成配置过程。最后保存并退出。在这里插入图片描述
3.3 如果连接的是Access数据库,进入的界面如下图所示。填写数据源名、说明、点击数据库栏目中的选择或创建,选择数据库文件所在的磁盘、目录和要选择的数据库文件类型以及数据库文件,根据需要选择只读、独占模式,然后点击确认,在odbc数据源管理程序界面点击确认退出。
在这里插入图片描述
4、编写测试数据库的代码,确保c:\windows\System32目录中含有odbc32.dll。

以下代码引用自buptlihang,https://blog.csdn.net/buptlihang/article/details/80275641

#include <windows.h>
#include <iostream>
#include <assert.h>
#include <sql.h>
#include <sqlext.h>
using namespace std;
int main() {
	SQLHENV serverhenv;//环境句柄
	SQLHDBC serverhdbc;//连接句柄
	SQLHSTMT serverhstmt;//语句句柄
	SQLRETURN ret;//结果集
	SQLCHAR Sno[20] = { 0 }, Sname[20] = { 0 }, Ssex[20] = { 0 }, Sage[20] = { 0 },Sdept[20] = { 0 };
	SQLLEN grade = 0, length=20;

	//分配环境句柄
	ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &serverhenv);

	//设置环境属性
	ret = SQLSetEnvAttr(serverhenv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
	if (!SQL_SUCCEEDED(ret))
	{
		cout << "AllocEnvHandle error!" << endl;
		system("pause");
	}
	//分配连接句柄
	ret = SQLAllocHandle(SQL_HANDLE_DBC, serverhenv, &serverhdbc);
	if (!SQL_SUCCEEDED(ret))
	{
		cout << "AllocDbcHandle error!" << endl;
		system("pause");
	}

	//数据库连接
	ret = SQLConnect(serverhdbc, (SQLCHAR*)"AccessDB", SQL_NTS, (SQLCHAR*)"我是用户名", SQL_NTS, (SQLCHAR*)"我是密码", SQL_NTS);//第二个参数是之前配置的数据源,后面是数据库用户名和密码
	if (!SQL_SUCCEEDED(ret))
	{
		cout << "SQL_Connect error!" << endl;
		system("pause"); 
	}



	//分配执行语句句柄
	ret = SQLAllocHandle(SQL_HANDLE_STMT, serverhdbc, &serverhstmt);
	//执行SQL语句
	//ret = SQLExecDirect(serverhstmt,(SQLCHAR*)"use idb; insert into student values('777777777','张三','男',20,'计科');",SQL_NTS);
	
	SQLCHAR sql[] = "select * from student where Ssex='女';";
	ret = SQLExecDirect(serverhstmt, sql, SQL_NTS);
	if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
		//绑定数据
		SQLBindCol(serverhstmt, 1, SQL_C_CHAR, (void*)Sno, sizeof(Sno), &length);
		SQLBindCol(serverhstmt, 2, SQL_C_CHAR, (void*)Sname, sizeof(Sname), &length);
		SQLBindCol(serverhstmt, 3, SQL_C_CHAR, (void*)Ssex, sizeof(Ssex), &length);
		SQLBindCol(serverhstmt, 4, SQL_C_CHAR, (void*)&Sage, sizeof(Sage), &length);
		SQLBindCol(serverhstmt, 5, SQL_C_CHAR, (void *)&Sdept, sizeof(Sdept), &length);
		//将光标移动到下行,即获得下行数据
		while (SQL_NO_DATA != SQLFetch(serverhstmt))
		{
			cout << Sno << " " << Sname << " " << Ssex << " " << Sage << " " << Sdept << endl;
		}
	}
	//释放语句句柄
	ret = SQLFreeHandle(SQL_HANDLE_STMT, serverhstmt);
	if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret)
		cout << "free hstmt error!" << endl;
	//断开数据库连接
	ret = SQLDisconnect(serverhdbc);
	if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret)
		cout << "disconnected error!" << endl;
	//释放连接句柄
	ret = SQLFreeHandle(SQL_HANDLE_DBC, serverhdbc);
	if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret)
		cout << "free hdbc error!" << endl;
	//释放环境句柄句柄
	ret = SQLFreeHandle(SQL_HANDLE_ENV, serverhenv);
	if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret)
		cout << "free henv error!" << endl;
	cout << "Exit!" << endl;
	//system("pause");
	return 0;
}

二、使用JDBC连接数据库

1、下载对应数据库的驱动程序,MySQL数据库使用的驱动为mysql-connector-java-[版本号].jar,SQL server数据库使用的驱动为mssql-jdbc-[版本号].jre[jre版本号].jar,Access数据库使用的驱动为Access_JDBC30.jar(非Access官方驱动,http://www.hxtt.com/)。也可使用JDBC-ODBC桥连接数据库,但JDK8以后的版本不再支持,不建议使用。
2、添加jar包。如果是普通项目添加Jar包,如果是JSP项目则将驱动程序jar包放在web项目的web/WEB-INF/libs中,也可以放在tomcat的libs中(不建议)
3、编写JDBC连接数据库的Java程序

import java.sql.*;
public class Test{
    public static void main(String[] argv){
        String driver="com.mysql.cj.jdbc.Driver";
        //如果是SQL server,此处应该是com.microsoft.sqlserver.jdbc.SQLServerDriver
        //如果是Access并且使用Access_JDBC30.jar,此处应该是com.hxtt.sql.access.AccessDriver
        String table="student";//记录表名称
        String usr="我是用户名";//用户名
        String pwd="我是密码";//密码
        String url="jdbc:mysql://localhost:3306/helloworld?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL";
        //如果是SQL server此处应该是jdbc:sqlserver://localhost:1433; DatabaseName=student
        //如果是Access此处应该是jdbc:Access:///[数据库文件路径]
        try{
            Class.forName(driver);//注册驱动程序
        }catch(ClassNotFoundException e){
            e.printTrackStack();
            System.err.println("加载驱动程序失败!");
        }

        try{
            Connection con=DriverManager.getConnection(url,usr,pwd);//建立数据库连接
            try{
                Statement stmt=con.createStatement();//建立语句
                try{
                    ResultSet rs=stmt.executeQuery("select * from student;");//执行查询语句
                    while(rs.next()){
                        System.out.println(rs);
                    }
                }catch(SQLException e){
                    e.printTrackStack();
                    System.err.println("执行查询语句失败!");
                }finally{
                    stmt.close();
                }
            }catch(SQLException e){
                e.printTrackStack();
                System.err.println("创建会话失败!");
            }finally{
                con.close();
            }
        }catch(SQLException e){
            e.printTrackStack();
            System.err.println("连接数据库失败!");
        }

    }
}
  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

ChdCharlesLiang

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值