标签: mysql-connector

Debug和Release之间有(性能)差异吗?

我正在使用MySql Connector .NET加载帐户并将其传输到客户端.考虑要加载的帐户的子元素,此操作相当密集.

在调试模式下,加载帐户最多需要1秒.平均值为500毫秒.在发布模式下,加载帐户需要1到4秒.平均值为1500毫秒.

由于#if DEBUG我的代码中没有指令或类似内容,我想知道差异来自哪里.

是否有可以更改的项目构建选项?或者它与MySql Connector .NET有什么关系,根据构建模式会有不同的行为?

编辑:蜱虫监测.

Debug (Average: 213000 ticks)
730000
320000
60000
50000
190000
130000
210000
180000
160000
110000
390000
270000
150000
190000
230000
210000
150000
200000
190000
140000

Release (Average: 4404500 ticks)
12940000
170000
180000
80000
80000
130000
120000
5060000
5090000
130000
50000
10430000
25160000
150000
160000
130000
17620000
10160000
100000
150000
Run Code Online (Sandbox Code Playgroud)

比较:

Release需要20倍的调试时间(平均比较).

4,404,500/213,000 = 20

现在第一次操作确实更长,但总的来说,所有其他时间也是如此.任何的想法?

编辑2:我添加了更广泛的测试,计算总时间.对于50个帐户加载,调试平均需要4秒,发布时需要40秒.我开始对此非常绝望 - 这对我的应用程序来说是一个严重的性能问题.有没有人猜测如何解决这个问题?

.net c# mysql mysql-connector

5
推荐指数
2
解决办法
1698
查看次数

MySQL Connector / NET连接每个连接是否有多个DataReader?

大家好,我已经从Java迁移到C#,因为我意识到我更喜欢C#语言功能,而不是Java中的功能,但是这个问题很小。在MySQL Connector / J和JDBC中,我相信我的一个应用程序允许PreparedStatement在打开另一个时执行多个s,就像我可以执行一个返回a的查询,ResultSetResultSet在仍然打开时,我可以打开另一个PreparedStatement并获取另一个ResultSet或者我可以根据我第一次获得的数据执行更新ResultSet(即,插入盐值,并在我意识到该行在密码列中包含明文密码的情况下,使用SHA512哈希更新密码列)。

但是,使用连接器/ NET,每当我尝试执行此操作时,我都会发现以下错误: MySql.Data.MySqlClient.MySqlException: There is already an open DataReader associated with this Connection which must be closed first.

有没有简单的方法可以解决此错误,也许是MySQL到.NET桥的其他任何实现?我实际上不想在一个应用程序中创建很多数据库连接,尽管我可能想为我的应用程序中的每个线程创建一个数据库连接(例如在ThreadLocal中)。当我以两种不同的方法同时执行两个查询时,ThreadLocal DB连接会有所帮助,但是很显然,我无法将这两个命令分成不同的线程,并且我不想创建多余的线程。

顺便说一下,这是代码本身。是的,关闭阅读器后,我可以将更新代码向下移动,但是我有更多类似的方法,其中一些方法比此方法更难解决:

MySqlConnection con = DatabaseConnection.GetConnection();
MySqlCommand cmd = con.CreateCommand();
cmd.CommandText = "SELECT `id`,`password`,`salt`,`pin`,`gender`,`birthday` FROM `accounts` WHERE `name` = '" + AccountName + "'";
MySqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
    AccountId = reader.GetInt32(0);
    string passhash = !reader.IsDBNull(1) ? reader.GetString(1) : null;
    string salt = …
Run Code Online (Sandbox Code Playgroud)

.net mysql database-connection sqldatareader mysql-connector

5
推荐指数
1
解决办法
8561
查看次数

通过Connector/NET与MySQL进行C#

我正在用C#(4.0 Framework)开发CMS应用程序,它通过MySQL Connector(6.5.4)连接到远程服务器上的MySQL数据库(5.0.95).

我在执行查询时遇到问题.

例如我的连接字符串:

"Server=" + Options.DbServer + ";Database="+ Options.Database +";Uid=" + Options.DbUser + ";Pwd=" + Options.DbPassword + ";CharSet=utf8; Connect Timeout=30;";
Run Code Online (Sandbox Code Playgroud)

我有静态类来管理数据库相关的东西,我有私人成员_connection.

private static MySqlConnection _connection;
public static MySqlConnection Connection
{ 
    get
    {
        if (_connection.State != ConnectionState.Open)
            _connection.Open();

        return _connection;
    } 
    set { _connection = value; }
}
Run Code Online (Sandbox Code Playgroud)

这是初始化连接的方法:

public static bool Init(string cs)
{
    _connection = new MySqlConnection(cs);
    MySqlCommand command = new MySqlCommand("SET NAMES utf8", Connection);
    command.ExecuteNonQuery();
    return true;
}
Run Code Online (Sandbox Code Playgroud)

这是我得到异常的方法:

public static bool InsertRecord(MySqlCommand command)
{
    command.Connection …
Run Code Online (Sandbox Code Playgroud)

c# mysql mysql-connector

5
推荐指数
1
解决办法
2万
查看次数

MySQL C++连接器中的内存泄漏

我正在使用MySQL C++连接器.Valgrind显示每个连接泄漏192个字节.它只是在线程环境中泄漏内存而没有线程,它没有泄漏任何内存.我做错了什么?我是否需要调用其他一些功能进行清理?示例代码:

#include <pthread.h>
#include <iostream>
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
#include <cppconn/prepared_statement.h>

using namespace std;

void* test(void* arg) {

  try {
    sql::Driver *driver;
    sql::Connection *con;
    /* Create a connection */
    driver = get_driver_instance();
    con = driver->connect("tcp://127.0.0.1:3306", "root", "root");
    /* Connect to the MySQL test database */
    con->setSchema("test");
    delete con;
  } catch (sql::SQLException &e) {
    cout << "# ERR: SQLException in " << __FILE__;
    cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << …
Run Code Online (Sandbox Code Playgroud)

c++ mysql mysql-connector

5
推荐指数
1
解决办法
2900
查看次数

如何从MySQL Connector/C++获取本机C API连接结构?

我正在使用MySQL Connector/C++从C++程序与MySQL服务器通信.出于某种原因(请参阅下面的背景知识),我需要在某些时候使用本机C API连接结构.如何从Connector/C++类中获取它?

背景:

我想从客户端的主内存中将大量数据(最多2-3亿个元组)加载到服务器中.因此,我想尝试LOAD DATA INFILE语句.为了避免首先将整个数据写入文本文件,我想定义自己的本地infile处理程序,它直接从主内存中读取数据.

但是,Connector/C++没有设置用户定义的本地infile处理程序的方法,但是本机C API可以.相应的C函数mysql_set_local_infile_handler()需要一个本机连接处理程序(结构MYSQL)作为输入参数.那么如何从Connector/C++中获取这个处理程序呢?或者有没有更好的方法在Connector/C++环境中设置本地infile处理程序?

c++ mysql mysql-connector

5
推荐指数
1
解决办法
840
查看次数

使用%s的Python MySQL Connector数据库查询失败

我有一个基本程序,应该查询包含用户信息的数据库.我正在尝试为特定用户选择信息并将其打印到控制台.

这是我的代码:

import mysql.connector

funcon = mysql.connector.connect(user='root', password='pass', host='127.0.0.1', database='fundata')
funcursor = funcon.cursor()

query = ("SELECT * FROM funtable WHERE userName=%s")
uName = 'user1'

funcursor.execute(query, uName)

for (userName) in funcursor:
    print("{}".format(userName))
Run Code Online (Sandbox Code Playgroud)

我将用户名存储在变量中,因为稍后我计划从tkinter输入框中获取用户名.当我执行此代码时,我收到以下错误:

mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s' at line 1
Run Code Online (Sandbox Code Playgroud)

我已经尝试将%s放在查询中的引号中,但随后它逐字地搜索用户名'%s'并且不返回任何内容.如何更改我的代码,以便只查询该用户的数据库?

谢谢.

仅供参考:我使用的是python 3.3.

python mysql-connector python-db-api mysql-connector-python

5
推荐指数
1
解决办法
4372
查看次数

我应该在MySQL连接器/ c ++中使用哪个执行函数?

我需要编写一个包装器(基于MySQL Connector/C++),它封装了特定的SQL语句并提供了用户友好的接口,如:insert(),update(),delete(),select()等.

在MySQL的原生C API中,每个SQL语句都可以通过简单地调用"mysql_real_query()"来执行,但现在,在MySQL Connector/C++中,事情变得有些混乱.有3在执行功能SQL :: Statment类和6在执行功能SQL :: PreparedStatement的类:

MySQL的连接器-C++ - 1.1.5 \驱动\ mysql_statement.h:

bool execute(const sql::SQLString& sql);
sql::ResultSet* executeQuery(const sql::SQLString& sql);
int executeUpdate(const sql::SQLString& sql);
Run Code Online (Sandbox Code Playgroud)

mysql-connector-c ++ - 1.1.5\driver\mysql_prepared_statement.h,104:

bool execute();
bool execute(const sql::SQLString& sql);

sql::ResultSet executeQuery();
sql::ResultSet executeQuery(const sql::SQLString& sql);

int executeUpdate();
int executeUpdate(const sql::SQLString& sql);
Run Code Online (Sandbox Code Playgroud)

我想知道为什么有这么多执行功能而不是简单统一的执行功能?应该使用哪些执行函数来指定SQL语句?

注意:我使用MySQL Connector/C++ …

c++ mysql mysql-connector

5
推荐指数
1
解决办法
3221
查看次数

使用大型数据集调用cursor.fetchall()时,python脚本会挂起

我有一个返回超过125K行的查询.

目标是编写迭代遍历行的脚本,并为每个行填充第二个表,其中包含从查询结果处理的数据.

为了开发脚本,我用一小部分数据创建了一个重复的数据库(4126行)

在小型数据库上,以下代码有效:

import os
import sys
import random

import mysql.connector

cnx = mysql.connector.connect(user='dbuser', password='thePassword',
                          host='127.0.0.1',
                          database='db')
cnx_out = mysql.connector.connect(user='dbuser', password='thePassword',
                          host='127.0.0.1',
                          database='db')

ins_curs = cnx_out.cursor()

curs = cnx.cursor(dictionary=True)
#curs = cnx.cursor(dictionary=True,buffered=True) #fail

with open('sql\\getRawData.sql') as fh:
    sql = fh.read()

curs.execute(sql, params=None, multi=False)
result = curs.fetchall()  #<=== script stops at this point
print len(result) #<=== this line never executes

print curs.column_names

curs.close()
cnx.close()
cnx_out.close()
sys.exit()
Run Code Online (Sandbox Code Playgroud)

该行在curs.execute(sql, params=None, multi=False)大型和小型数据库上都成功.如果我curs.fetchone()在循环中使用,我可以读取所有记录.

如果我改变了这条线:

curs = cnx.cursor(dictionary=True)
Run Code Online (Sandbox Code Playgroud)

阅读:

curs = …
Run Code Online (Sandbox Code Playgroud)

python mysql-connector

5
推荐指数
1
解决办法
1753
查看次数

build.gradle错误设置targetCompatibility t 1.7

我收到此错误消息,提示
错误:将字节码转换为dex时出错:原因:Dex无法解析版本52字节代码。这是由使用Java 8或更高版本编译的库依赖关系引起的。如果您在库子模块中使用'java'gradle插件,则将targetCompatibility ='1.7'sourceCompatibility ='1.7'添加到该子模块的build.gradle文件中。

我试图在依赖项中添加targetCompatibility ='1.7'和sourceCompatibility ='1.7'但它仍然给我相同的错误,我该如何解决呢?

(我刚刚在我的库中添加了mysql连接器,它会自动生成该依赖项)

 apply plugin: 'com.android.application'

android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
    applicationId "com.example.boneyflesh.connectnapls"
    minSdkVersion 17
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2',   {
    exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.1.0'
    testCompile 'junit:junit:4.12'
    compile files('libs/mysql-connector-java-5.1.38-bin.jar')

   }
Run Code Online (Sandbox Code Playgroud)

mysql-connector android-studio android-gradle-plugin

5
推荐指数
1
解决办法
2922
查看次数

通过Apache-kafka将删除事件从MySQL流式传输到PostgreSQL

我试图将事件从MySQL传输到PostgreSQLApache Kafka.尽管插入和更新可以正常工作,但我不知道如何从中删除记录MySQL并将事件传输到PostgreSQL

假定以下拓扑:

               +-------------+
               |             |
               |    MySQL    |
               |             |
               +------+------+
                      |
                      |
                      |
      +---------------v------------------+
      |                                  |
      |           Kafka Connect          |
      |  (Debezium, JDBC connectors)     |
      |                                  |
      +---------------+------------------+
                      |
                      |
                      |
                      |
              +-------v--------+
              |                |
              |   PostgreSQL   |
              |                |
              +----------------+
Run Code Online (Sandbox Code Playgroud)

我正在使用以下docker镜像;

  1. 阿帕奇·祖克珀
  2. 阿帕奇-卡夫卡
  3. Debezium / JDBC连接器

然后

# Start the application
export DEBEZIUM_VERSION=0.6
docker-compose up

# Start PostgreSQL connector
curl -i -X POST -H "Accept:application/json" -H  "Content-Type:application/json" …
Run Code Online (Sandbox Code Playgroud)

mysql postgresql mysql-connector apache-kafka

5
推荐指数
1
解决办法
783
查看次数