我正在使用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秒.我开始对此非常绝望 - 这对我的应用程序来说是一个严重的性能问题.有没有人猜测如何解决这个问题?
大家好,我已经从Java迁移到C#,因为我意识到我更喜欢C#语言功能,而不是Java中的功能,但是这个问题很小。在MySQL Connector / J和JDBC中,我相信我的一个应用程序允许PreparedStatement在打开另一个时执行多个s,就像我可以执行一个返回a的查询,ResultSet而ResultSet在仍然打开时,我可以打开另一个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
我正在用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) 我正在使用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) 我正在使用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处理程序?
我有一个基本程序,应该查询包含用户信息的数据库.我正在尝试为特定用户选择信息并将其打印到控制台.
这是我的代码:
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.
我需要编写一个包装器(基于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++ …
我有一个返回超过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) 我收到此错误消息,提示
错误:将字节码转换为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传输到PostgreSQL,Apache Kafka.尽管插入和更新可以正常工作,但我不知道如何从中删除记录MySQL并将事件传输到PostgreSQL。
假定以下拓扑:
+-------------+
| |
| MySQL |
| |
+------+------+
|
|
|
+---------------v------------------+
| |
| Kafka Connect |
| (Debezium, JDBC connectors) |
| |
+---------------+------------------+
|
|
|
|
+-------v--------+
| |
| PostgreSQL |
| |
+----------------+
Run Code Online (Sandbox Code Playgroud)
我正在使用以下docker镜像;
然后
# 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)