C++及Java连接MySQL方法

来源:互联网 发布:unity3d 上海 外包 编辑:程序博客网 时间:2024/06/03 17:59

Java连接MySQL

1.下载一个connector的jar包,例如 mysql-connector-java-5.1.7-bin.jar;

2.工程-》属性-》库中:添加外部jar,选择下载的connector的jar包即可;

3.简要连接程序参考:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import com.mysql.jdbc.PreparedStatement;
public class DataBase {
    private static String dbUrl = "jdbc:mysql://localhost:3306/news";
    private static String user = "root";
    private static String password = "xx";
    private static Connection conn = null;
    private static PreparedStatement prest = null;
    public DataBase(){}
    public DataBase(String db,String user,String passwd)
    {
        this.dbUrl = "jdbc:mysql://localhost:3306/"+db;
        this.user = user;
        this.password = passwd;
    }
    public static void insertNews(News news, String table){
        conn = null;
        try{
            Class.forName("com.mysql.jdbc.Driver");
            java.sql.DriverManager.registerDriver(new com.mysql.jdbc.Driver());
            conn = DriverManager.getConnection(dbUrl,user,password);
            prest = null;
            String sqll = "insert into "+table+"(id,title,content,ntype,site,url,pubtime,source,author,cgroup)"+"values(?,?,?,?,?,?,?,?,?,?)";
            prest = (PreparedStatement)conn.prepareStatement(sqll);
            prest.setInt(1, news.id);
            prest.setString(2, news.title);
            prest.setString(3, news.content);
            prest.setString(4, news.ntype);
            prest.setString(5, news.site);
            prest.setString(6, news.url);
            prest.setTimestamp(7, news.pubtime);
            prest.setString(8, news.source);
            prest.setString(9, news.author);
            prest.setString(10, news.cgroup);
            prest.executeUpdate();
        
            prest.close();
        }
        catch (ClassNotFoundException e) {
            // TODO 自动生成 catch 块
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO 自动生成 catch 块
            e.printStackTrace();
        }
    }
}

C++连接MySQL

网络上的很多介绍都有问题,这里主要参考 http://www.cnblogs.com/lovebread/archive/2009/11/24/1609936.html

1. 下载C的connector,主要是include和lib文件夹(MySQL connector for C)

2. include目录下的libmysql.lib文件拷到VS2008安装目录中的VC\lib\下,然后在 项目-选项-c/c++-常规 中的附加包含目录以及 链接器-常规 中的附加库目录中加入“……\MySQL\include\”(connector的路径),并且在 链接器-输入 中的附加依赖项内添加“libmysql.lib”,这样即可使编译器找到mysql.h头文件,并可在程序中使用c语言的mysql API来操作数据库。另外还需要在project目录下拷贝上libmysql.dll。

3. 代码

#include<winsock2.h>
#include<iostream>
#include"mysql.h"

using namespace std;
int main(char **args)
{
    const char user[] = "root";         //username
    const char pswd[] = "****";         //password
    const char host[] = "localhost";    //or"127.0.0.1"
    const char dbname[] = "news";        //database
    unsigned int port = 3306;           //server port  
    MYSQL mysql;
    MYSQL_RES *result = NULL;
    MYSQL_ROW sql_row;
    MYSQL_FIELD *fd;
    char column[32][32];
    int res;
    mysql_init(&mysql);
    if (mysql_real_connect(&mysql,host,user,pswd,dbname,port,0,0))
    {
          cout<<"ok"<<endl;
          mysql_query(&mysql, "SET NAMES GBK");
          res=mysql_query(&mysql,"select * from sy_163_news");
          if(!res)
          {
              result = mysql_store_result(&mysql);
              if(result)
              {
                int i,j;
                cout<<"number of result: "<<(unsigned long)mysql_num_rows(result)<<endl;
                for(i=0;fd=mysql_fetch_field(result);i++)//获取列名
                {
                    strcpy(column[i],fd->name);
                }
                j=mysql_num_fields(result);
                for(i=0;i<j;i++)
                {
                    printf("%s\t",column[i]);
                }
                printf("\n");
                while(sql_row=mysql_fetch_row(result))//获取具体的数据
                {
                    for(i=0;i<j;i++)
                    {
                        printf("%s\n",sql_row[i]);
                    }
                    printf("\n");
                }
              }
          }
          return 0;
    }
    else
    {
           int i = mysql_errno(&mysql);
           const char * s = mysql_error(&mysql);
           cout << s<<endl;
     }
}

 

关于用VS2008测试出现“MSVCRTD.lib(crtexew.obj) :errorLNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用”的错误,参考 http://apps.hi.baidu.com/share/detail/18226584 解决。

原创粉丝点击