本文目录一览:
- 1、在mysql里怎样自定义函数,如何调用和执行
- 2、怎样在C++中调用MYSQL数据库中的数据
- 3、MySQL中窗口函数的使用
- 4、hibernate怎么调用mysql中的year,month,concat等函数
在mysql里怎样自定义函数,如何调用和执行
create function 函数名称(参数列表)
reurns 返回值类型
函数体
执行的方法很简单:
加载
** create function 函数名称 returns {string|real|integer}
** soname 你定义的动态库位置
释放!
** drop function 函数名称
怎样在C++中调用MYSQL数据库中的数据
1、用CAPI连接MySQL数据库有两个步骤:
1)初始化一个连接句柄
2)建立连接
所用到的函数如下:
MYSQL *mysql_init(MYSQL *connection); // 初始化连接句柄
//成功返回MySQL结构指针,失败返回NULL
MYSQL *mysql_real_connect(MYSQL *connection,
const char *server_host,
const char *sql_user_name,
const char *sql_password,
const char *db_name,
unsigned int port_number,
const char *unix_socket_name,
unsigned int flags); //建立连接
//成功返回MySQL结构指针,失败返回NULL
以下是完整实例:
#include iostream
#include fstream
#include cstdlib
#include mysql/mysql.h
using namespace std;
void mysql_err_function(MYSQL * connection);
int main()
{
//freopen("input.txt","r",stdin);
MYSQL * connection;
connection = mysql_init(NULL);
if (!connection)
{
cout "mysql_init failed!" endl;
exit(-1);
}
if (!mysql_real_connect(connection,"localhost","root","123456","test",0,NULL,0))
{
cout "Connection To MySQL failed!" endl;
mysql_err_function(connection);
}
cout "Connection To MySQL Server is Success..." endl;
string str;
getline(cin,str);
int res = 0;
int affected_count = 0;
while (str != "close" str != "" !res)
{
res = mysql_query(connection,str.c_str());
affected_count += mysql_affected_rows(connection);
if (res)
{
if (mysql_errno(connection))
{
cout "Error " mysql_errno(connection) " : "
mysql_error(connection) '\n' endl;
break;
}
}
getline(cin,str);
}
cout "Have affected " affected_count " rows!" endl;
mysql_close(connection);
cout "Connection To MySQL Server is closed..." endl;
return 0;
}
void mysql_err_function(MYSQL * connection)
{
if (mysql_errno(connection))
{
cout "Error " mysql_errno(connection) " : "
mysql_error(connection) endl;
exit(-1);
}
}
MySQL中窗口函数的使用
MySQL的窗口函数最主要作用是对数据进行分组操作(可以进行分组排序,求TopN,移动平均,聚合计算等),也就是相当于说在当前的详细级别视图里,对更低级别的数据进行计算呈现(可以与Tableau的表计算函数进行对比学习),比如说目前的表格是全国数据,但是要对不同省份的数据进行分组计算,这个时候使用窗口函数就会很方便。
在MySQL中,窗口函数要在8.0版本之后才能使用,如果是低版本的话,只能使用设置变量的方式完成以上内容的实现,设置变量在逻辑上会比窗口函数更加难以理解和使用,使用窗口函数可以大大的提高效率。
在很多SQL的教程中,说到窗口函数的时候,都只是说窗口函数的排序优势而已,但是在实际工作中,其用处远远不止这些。
以下为窗口函数的情况:
hibernate怎么调用mysql中的year,month,concat等函数
year(), month(), concat() 是 mysql 特有的函数,其他数据库也有对应的函数,而 hibernate 存在的意义就是屏蔽这些数据库特有的东西,这样的话:
如果数据库的 datetime/date 之类的字段并没有和 Java 的 Date 或 Calender 属性进行映射的话,无论你使用 HQL 还是Criteria 都无法实现对日期的操作,因为 HQL 和 Criteria 都是基于对象的查询方式。
基于对象的查询,如下,先做映射
@Entity
@Table(name="PREFERRED_CUSTOMER")
public PCustomer {
@Column(name = "EXPIRATION_DATE")
@Temporal(TemporalType.DATE)
protected java.util.Date expirationDate; // only day, month, year
}
可以使用 HQL 这么查询:
ListPCustomer list = session
.createQuery("from PCustomer pc where pc.expirationDate = :edate")
.setParameter("edate", new java.util.Date(), TemporalType.DATE)
.list();
hibernate 屏蔽了数据库特有的东西,是为了方便移植,但有的老项目较多地使用了数据库特有的东西,如MSSQL 的 T-SQL,这时,就需要使用 hibernate 对 SQL 的原生支持,Session 提供了 createSQLQuery() 这样的方法,此时的 hibernate 就相当于一个简单的 mapper,只提供对象关系映射,当然,一旦你在代码中使用了对 SQL 的原生支持,移植性就不好了。
此种方式可以使用你所说的 MySQL 函数