sql server数据库中带参数的函数调用

GetChild()是我自定义的函数,有一个输入参数

下列语句 select No_Hospital from GetChild('10001') 就是正确的,但是如果我写成这样子就提示有错误:

select No_Hospital from GetChild(select choscode from SysDictHospital where No_Hospital= 10005)

请各位帮忙看一下,O(∩_∩)O~

3个回答

那样的话你应把子句 select choscode from SysDictHospital where No_Hospital= 10005 先exec出来一个值,然后再给函数调用

函数不支持execute,可以稍微修改下改用存储过程

那样的话调用方式基本也没什么不同

直接用存储过程吧

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
为什么用matlab写的函数,在matlab下运行和用java调用后运行,结果会不一样
绘制出来的图像不一样。有涉及到sql server数据库读取,以及randn函数,以及plot函数。参数传递的是一样的。
C++如何在远程客户端使用命名管道连接sql server数据库
1、是不是需要配置数据源; 2、使用连接串DRIVER={SQL Server};SERVER=NPServer3;DATABASE=Ashare_OIW;UID=sa;PWD=szkd@@600446;Network Library=dbnmpntw",调用的连接函数时SQLDriverConnect(sqlhDbc, NULL, (SQLCHAR *)p_szConnStr, SQL_NTS, outstr, sizeof(outstr), &outstrlen, SQL_DRIVER_NOPROMPT); 总是返回-1
调用存储过程出错,提示不允许使用远程表值函数调用
1、项目使用springmvc, spring, mybatis三个框架 2、在一个serverice中调用dao的方法,dao方法执行的是一个存储过程,该service方法在spring的事务中进行了如下配置<tx:method name="refreshMetaData" propagation="NEVER">,不使用事务管理。 3、数据库使用SQL Server 2008 现在service在执行refreshMetaData,出现了如下问题: ![图片说明](https://img-ask.csdn.net/upload/201508/11/1439252234_292418.jpg) 而在数据库中直接执行这个存储过程就不会出现任何错误信息,正常执行。存储过程中使用了SQL Server的链接服务器linkedserver。 存储过程代码如下: 1 CREATE PROC [dbo].[PRO_UPDATE_METADATA] 2 @metadataclassId int, 3 @parentmetadataclassId int, 4 @metadataTabName varchar(500), 5 @linkedServerName varchar(8000), 6 @planDBHost varchar(20), 7 @planDBName varchar(200), 8 @planDBUser varchar(200), 9 @planDBPWD varchar(200), 10 @planDBPort varchar(10), 11 @trans INT output 12 AS 13 DECLARE @remoteServer varchar(8000) =''; -- 远程服务器地址 14 DECLARE @TableName varchar(8000) =''; -- 代码表名称 15 DECLARE @TableNames varchar(8000) =''; -- 所有代码表名称组成的字符串 16 DECLARE @fieldName varchar(8000) ='';-- 元数据字段名称 17 DECLARE @fieldNames varchar(8000) ='';-- 元数据所有字段名称组成的字符串 18 DECLARE @fieldNamesWithTempTable varchar(8000) ='';-- 元数据所有字段名称组成的字符串 19 DECLARE @readFieldsSQL varchar(8000) = ''; -- 需要读取的字段 20 DECLARE @readFieldsSQL2 varchar(8000) = ''; -- 需要读取的字段 21 DECLARE @inserDataSql varchar(8000) ='';-- 存储元数据的SQL 22 23 DECLARE @result_flag int = 0; -- 出错标识,用户事物回滚提交 24 25 DECLARE @count int; 26 DECLARE fieldsCur CURSOR FOR select CODE_TABLE, FIELD_NAME from TBL_METADATA_CLASS_FIELD where 27 METADATA_ID=@metadataclassId or METADATA_ID=@parentmetadataclassId; -- 元数据字段 28 29 30 DECLARE @dataTblName varchar(200);-- 包含元数据属性的数据表名称 31 DECLARE @getCodeTableDataSQL varchar(8000);-- 获取代码表数据的SQL 32 DECLARE @getDataTableSQL varchar(8000); -- 获取数据表数据的SQL 33 DECLARE @unitFiles varchar(8000); -- 获取被审计单位信息 34 DECLARE @joinConditions varchar(8000); -- -数据表于代码表查询数据的条件 35 DECLARE @tableCursorSQL nvarchar(max); -- 动态创建游标SQL 36 37 BEGIN 38 39 /*创建链接服务器*/ 40 set @remoteServer = @planDBHost + ',' + @planDBPort 41 -- 判断链接服务器是否存在 42 IF EXISTS (SELECT 1 FROM MASTER..SYSSERVERS WHERE SRVNAME = @linkedServerName) 43 EXEC SP_DROPSERVER @linkedServerName,'DROPLOGINS' 44 -- 创建链接服务器 45 EXEC sp_addlinkedserver 46 @server=@linkedServerName, 47 @srvproduct='', 48 @provider='SQLOLEDB', 49 @datasrc=@remoteServer; 50 51 -- 登录链接服务器 52 EXEC sp_addlinkedsrvlogin @linkedServerName, 'false', NULL, @planDBUser, @planDBPWD 53 54 BEGIN TRANSACTION; 55 56 /*获取元数据字段信息*/ 57 set @count = 0; 58 set @joinConditions = ' 1=1 ' 59 Open fieldsCur; 60 fetch next from fieldsCur Into @TableName,@fieldName 61 While ( @@Fetch_Status=0 ) 62 begin 63 DECLARE @tableAlias varchar(30); 64 set @tableAlias = 'data_tab_' + CONVERT(varchar(2), @count); 65 set @readFieldsSQL = @readFieldsSQL + ', ' + '[' + @tableAlias + '].[' + @fieldName + '] as [' + @fieldName + ']'; 66 set @readFieldsSQL2 = @readFieldsSQL2 + ', ' + '[#dataTblName#].[' + @fieldName + '] as [' + @fieldName + ']'; 67 set @fieldNames = @fieldNames + ', ' + '[' + @fieldName + ']'; 68 set @fieldNamesWithTempTable = @fieldNamesWithTempTable + ', ' + '#codetabledata.[' + @fieldName + ']'; 69 set @TableNames = @TableNames + ',[' + @linkedServerName + '].[' + @planDBName + '].[dbo].' + '[' + @TableName + '] ' + @tableAlias; 70 set @joinConditions = @joinConditions + ' and [#dataTblName#].[' + @fieldName + ']=#codetabledata.[' + @fieldName + ']'; 71 set @count = @count + 1; 72 fetch next from fieldsCur Into @TableName,@fieldName; 73 end 74 Close fieldsCur; 75 Deallocate fieldsCur; 76 77 IF @@ERROR<>0 78 SET @result_flag=1; 79 80 -- 找出包含元数据分类属性的表 81 set @tableCursorSQL = 'DECLARE tablesCur CURSOR FOR select tblName from ( ' + 82 'select ' + 83 'sysobjects.name as tblName, ' + 84 'COUNT(*) as colCount ' + 85 'from ' + @linkedServerName + '.' + @planDBName + '.dbo.sysobjects ' + 86 'left join ' + 87 @linkedServerName + '.' + @planDBName + '.dbo.syscolumns ' + 88 'on sysobjects.id = syscolumns.id ' + 89 'where ' + 90 'sysobjects.xtype=''U'' ' + 91 'and syscolumns.name in ( ' + 92 'select FIELD_NAME from TBL_METADATA_CLASS_FIELD ' + 93 'where METADATA_ID=' + convert(varchar(20), @metadataclassId) + ' or METADATA_ID= ' + convert(varchar(20), @parentmetadataclassId) + 94 ') ' + 95 'group by sysobjects.name ' + 96 ') as cc where colCount >=' + convert(varchar(20), @count) + ' and tblName not like ''代码表_%'''; 97 98 exec sp_executesql @tableCursorSQL; 99 100 IF @@ERROR<>0 101 SET @result_flag=1 102 103 -- 清空数据信息表 104 exec ('truncate table ' + @metadataTabName); 105 open tablesCur; 106 fetch next from tablesCur Into @dataTblName 107 While ( @@Fetch_Status=0 ) 108 begin 109 -- 获取代码表数据 110 set @getCodeTableDataSQL = 'select distinct ' + SUBSTRING(@readFieldsSQL, 2, LEN(@readFieldsSQL)-1) + ' into #codetabledata from ' + SUBSTRING(@TableNames, 2, LEN(@TableNames)-1); 111 112 -- 基本单位信息 113 set @unitFiles = ',TBL_UNDERAUDITUNIT.[underauditunit] as [被采集单位信息], TBL_UNDERAUDITUNIT.[datadesc] as [数据信息描述], ' + 114 'TBL_UNDERAUDITUNIT.[othersoft] as [对方软件信息], TBL_UNDERAUDITUNIT.[remark] as [备注] '; 115 116 set @getDataTableSQL = 'select [col_id] as [DC_ID], [unit_id] ' + @unitFiles + REPLACE(@readFieldsSQL2, '#dataTblName#', @dataTblName) + ' into #metatableadata from #codetabledata ' + 117 'left join ' + 118 @linkedServerName + '.' + @planDBName + '.dbo.' + @dataTblName + ' ' + 119 'on ' + 120 REPLACE(@joinConditions, '#dataTblName#', @dataTblName) + ' ' + 121 'left join TBL_UNDERAUDITUNIT ' + 122 'on ' + 123 'TBL_UNDERAUDITUNIT.id = ' + @dataTblName + '.unit_id where col_id is not null'; 124 125 126 set @inserDataSql = ' insert into ' + @metadataTabName + '([DC_ID],[被采集单位信息], [数据信息描述],[对方软件信息],[备注] ' + @fieldNames + ') select * from ( ' + 127 ' select [DC_ID],[被采集单位信息], [数据信息描述],[对方软件信息],[备注] ' + @fieldNames + ' from #metatableadata ' + 128 ' except ' + 129 ' select [DC_ID],[被采集单位信息], [数据信息描述],[对方软件信息],[备注] ' + @fieldNames + ' from ' + @metadataTabName + 130 ' ) as metatab '; 131 132 133 exec(@getCodeTableDataSQL + ';' + @getDataTableSQL + ';' + @inserDataSql + '; drop table #codetabledata; drop table #metatableadata;'); 134 135 136 fetch next from tablesCur Into @dataTblName 137 end 138 Close tablesCur; 139 Deallocate tablesCur; 140 141 IF @result_flag=1 142 BEGIN 143 ROLLBACK TRANSACTION 144 SET @trans=1 145 END 146 ELSE 147 BEGIN 148 COMMIT TRANSACTION 149 SET @trans =0 150 END 151 -- 退出登录 152 Exec sp_droplinkedsrvlogin @linkedServerName, null; 153 --删除链接服务器 154 Exec sp_dropserver @linkedServerName; 155 select @trans as trans 156 157 END
关于VS2005对SqlServer数据库操作的问题
对数据库Student进行查询时运行到msado.tli文件中的下面这个函数中的raw_Open时就崩溃掉。 ``` inline HRESULT Recordset15::Open ( const _variant_t & Source, const _variant_t & ActiveConnection, enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Options ) { HRESULT _hr = raw_Open(Source, ActiveConnection, CursorType, LockType, Options); if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this)); return _hr; } ``` 调用代码: ``` CString strsql = _T("select * from LoginInfo where Name='"); strsql+=name; strsql+="' and Password='"; strsql+=psw; strsql+="'"; MessageBox(hwnd, strsql, _T("查询字符串"), MB_OK); CString strcolumn[6] = {_T("Name"),_T("Sex"),_T("Password"),_T("School"),_T("Major"),_T("Number")}; int ncolumn = 6; CStringArray strvalue; theApp.m_dao.GetData(strsql,strcolumn,ncolumn,strvalue); ``` ``` BOOL CDao::GetData(CString strSql,CString *strQueryCloum,int nCloumNum,CStringArray& strDataValue) { HRESULT het; //_bstr_t 字符串 _variant_t 多种数据类型集合 vt类型 ..value值 //com _bstr_t bstrSql = strSql; //执行sql _bstr_t bstrConnect = m_strConnect; //连库串 _bstr_t bstrQueryCloum; //列名 Fields *fields; FieldPtr fieldPtr; CString strValue; _variant_t varBLOB; try { //1.打开表 /*m_pRecordset->Open(查询SQL语句,连接串,打开方式,数据源更新时如何锁定结果集,以什么形式传入) 打开方式: adOpenUnspecified = -1, 默认的方式打开 adOpenForwardOnly = 0, 向前移动的游标打开 adOpenKeyset = 1, 以键值打开 adOpenDynamic = 2, 当你添加数据时别人也有可能往这个表添加数据,谁在前谁添加到前面(多人用数据库时) adOpenStatic = 3 别人也想往里面添加数据一直停留在打开时候 锁定结果集方式: adLockReadOnly = 1, 只读的不能改变数据 adLockPessimistic = 2, (保守式锁定)逐个 – 编辑时立即锁定数据源的纪录 adLockOptimistic = 3, (开放式锁定)逐个 – 只在调用update方法时才锁定纪录 adLockBatchOptimistic = 4 开方式 可以更新一批数据更新模式 + bstrConnect {"Driver={SQL Native Client};Server=192.168.1.92,2433;Uid=sa;Pwd=sa;Database=colin0716" (1)} _bstr_t + bstrSql {"select * from student" (1)} _bstr_t */ het = m_pRecordset->Open(bstrSql,bstrConnect,adOpenDynamic,adLockOptimistic,adCmdText); if (!SUCCEEDED(het)) { AfxMessageBox(_T("打开表失败")); m_strErrorMsg = _T("查询表失败"); return FALSE; } //循环结果 while(!m_pRecordset->ADOEOF) { //按行遍历 for(int i=0;i<nCloumNum;i++) { bstrQueryCloum = strQueryCloum[i]; fields = m_pRecordset->GetFields(); //fields 结果集中的字段集合。由于一行记录中可以包含多个字段,因此fileds属性是一个数组形式,数组中每一个元素代表一个字段 fieldPtr = fields->GetItem(bstrQueryCloum);//field对象表示记录集中数据的某个单独的列。 varBLOB = fieldPtr->GetValue();//获得当前列的值 //long nSize =fieldPtr->ActualSize; //注意图片名称必须为图片流的前一个字段 //strValue = DataToCStringType(varBLOB,nSize,strValue); strValue = DataToCStringType(varBLOB); strDataValue.Add(strValue); //varBLOB.Detach(); } m_pRecordset->MoveNext(); } m_pRecordset->Close(); } catch(_com_error *e) { m_strErrorMsg = e->ErrorMessage(); AfxMessageBox(e->ErrorMessage()); } return TRUE; } ``` 那个_hr是总是返回E_FAIL,然后return的时候就崩溃掉。 这几天在写一个对数据库操作的项目,但是这几天被这个问题给卡住了,实在是找不到如何解决了,还请各位大神指点迷津。![图片说明](https://img-ask.csdn.net/upload/201507/21/1437472591_187681.png)
jsp页面中无法显示数据库的表内容,求大神解答。
java文件 package xscj_bean; import java.sql.*; public class SQLServerConnBean { private Statement stmt = null; private Connection conn = null; ResultSet rs = null; //构造函数 public SQLServerConnBean () { } public void OpenConn( ) throws Exception { try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); String url = "jdbc:sqlserver://localhost:1433;databaseName=classcircle"; String user = "sa"; String password = "123456789123456"; conn = DriverManager.getConnection( url, user, password ); } catch(SQLException e) { System.err.println("Data.executeQuery: " + e.getMessage()); } } //执行查询类的SQL语句,有返回集 public ResultSet executeQuery(String sql) { rs = null; try { stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE ,ResultSet.CONCUR_UPDATABLE); rs = stmt.executeQuery(sql); } catch(SQLException e) { System.err.println("Data.executeQuery: " + e.getMessage()); } return rs; } //关闭对象 public void closeStmt() { try { stmt.close(); } catch(SQLException e) { System.err.println("Date.executeQuery: " + e.getMessage()); } } public void closeConn() { try { conn.close(); } catch(SQLException e) { System.err.println("Data.executeQuery: " + e.getMessage()); } } } ``` jsp文件 <%@ page contentType="text/html; charset=utf-8"%> <%@ page language="java" import="java.sql.*"%> <jsp:useBean id="SqlBean" scope="page" class="xscj_bean.SQLServerConnBean" /> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <title>JDBC连接SQL Server数据库</title> <style type="text/css"> <!-- .style1{ color:#ff0000; font-size:24px; } --> </style> </head> <body> <div align="center"> <span class="style1">JDBC连接SQL Server数据库</span><br><hr><br> </div> <table border="2" bordercolor="#ffcccc" align="center"> <tr bgcolor="cccccc" align="center"> <td>学号</td> <td>姓名</td> <td>专业</td> <td>总学分</td> </tr> <% //查询XSB表中XH,XM,ZY和ZXF字段的前10条记录 String sql="select top 10* From student"; SqlBean.OpenConn( ); //调用SqlBean中加载JDBC驱动的成员函数 ResultSet rs=SqlBean.executeQuery(sql); //取得结果集 while( rs.next( ) ) { %> <tr> <td><%=rs.getString("username")%></td> <td><%=rs.getInt("password")%></td> <td><%=rs.getInt("schoolnumber")%></td> <td><%=rs.getInt("ZXF")%></td> </tr> <% } %> <% out.print("数据库操作成功,恭喜你!"); rs.close(); SqlBean.closeStmt(); SqlBean.closeConn(); %> </table> </body> </html> ``` 结果却是这样的 ![图片说明](https://img-ask.csdn.net/upload/201704/24/1493024444_355993.png) 小白求助啊!!!!
微信小程序访问mysql的云函数
以下为个人看腾讯云大学视频做的,访问不了,请大神帮助,最好连同调用index.js。 // 云函数入口文件 const cloud = require('wx-server-sdk'); const mysql = require('mysql2/promise'); cloud.init() // 云函数入口函数 exports.main = async (event, context) => { const connection = await mysql.createConnection({ host:'cd-cdb-1y88ppya.sql.tencentcdb.com', user:'root', database: 'rkjsjy', password: '123456' }) const [rows, fields] = await connection.execute('select * from a_user') return } 数据库是我在腾讯云买的mysql数据库,在vfp里已经正常链接了 看腾讯云大学视频。
VS2010 MFC登录对话框打开数据库失败后意外出现主界面的问题
用VS2010 MFC建立了一个主界面为对话框的函数,要求需要登录对话框,且通过读取数据库来校验用户,代码如下: BOOL CManagementDlg::OnInitDialog()//主对话框初始函数 { CDialogEx::OnInitDialog(); _CLogInDlg dlgLogin; if(dlgLogin.DoModal() != IDOK)//登录对话框 { OnOK(); return TRUE; }_ // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 ShowWindow(SW_MAXIMIZE); // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } 登录对话框响应登录按钮的代码如下: void CLogInDlg::OnClickedButtonLogin() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); if(m_strLogUser.GetLength() == 0) { MessageBox(_T("请输入用户名!")); return; } CManagementDlg *pdlgMain = (CManagementDlg *)theApp.m_pMainWnd; CString strDataSource; CString strInitCatalog; CString strUser; CString strPassword; CString strTableName = _T(TABLE_NAME_STAFF); CAdoDBControl myAdoControl;//对象声明 CString strShow; UINT iGet = 0; iGet = CAdoDBControl::GetDbCfgFromIniFile(); if(iGet & INI_USERID_MISSING) { strShow.Format(_T("配置文件%s中未找到数据库用户名"), _T(INI_FILE_NAME)); MessageBox(strShow); return; } if(iGet & INI_PWD_MISSING) { strShow.Format(_T("配置文件%s中未找到数据库用户密码"), _T(INI_FILE_NAME)); MessageBox(strShow); return; } if(iGet & INI_DATASOURCE_MISSING) { strShow.Format(_T("配置文件%s中未找到数据库主机名"), _T(INI_FILE_NAME)); MessageBox(strShow); return; } if(iGet & INI_INITCATALOG_MISSING) { strShow.Format(_T("配置文件%s中未找到数据库名"), _T(INI_FILE_NAME)); MessageBox(strShow); return; } if(iGet & INI_FILE_MISSING) { strShow.Format(_T("配置文件%s未找到"), _T(INI_FILE_NAME)); MessageBox(strShow); return; } CAdoDBControl::GetDbCfg(strUser, strPassword, strDataSource, strInitCatalog); CString strSql; strSql.Format(_T("Provider=SQLOLEDB.1;Data Source=%s;User ID=%s;Password=%s;Initial Catalog=%s;Persist Security Info=FALSE"), strDataSource, strUser, strPassword, strInitCatalog); _int iResult = myAdoControl.Open(strSql.AllocSysString(), adModeUnknown); if(ADO_DB_SUCCESSFUL != iResult) { return; }_ strSql.Format(_T("SELECT * FROM %s WHERE 用户名='%s'"), strTableName, m_strLogUser); vector<vector<_variant_t>> vSelectResult = myAdoControl.Select(strSql.AllocSysString()); myAdoControl.Close(); int iFindNumber = vSelectResult.size(); if(iFindNumber < 1) { CString strMsg; strMsg.Format(_T("用户%s不存在"), m_strLogUser); MessageBox(strMsg); return; } _variant_t vUser = vSelectResult[0][STAFF_USERNAME_COLUMN]; _variant_t vPwd = vSelectResult[0][STAFF_PASSWORD_COLUMN]; CString strUserFromSql = (LPCTSTR)_bstr_t(vUser); CString strPwdFromSql = (LPCTSTR)_bstr_t(vPwd); if((!strUserFromSql.CompareNoCase(m_strLogUser)) && (strPwdFromSql == m_strLogPwd)) { pdlgMain->m_stCurUser.m_strUserName = strUserFromSql; _variant_t vElement = vSelectResult[0][STAFF_NO_COLUMN]; pdlgMain->m_stCurUser.m_strStaffNo = (LPCTSTR)_bstr_t(vElement); vElement = vSelectResult[0][STAFF_REALNAME_COLUMN]; pdlgMain->m_stCurUser.m_strRealName = (LPCTSTR)_bstr_t(vElement); vElement = vSelectResult[0][STAFF_AUTHORITY_COLUMN]; pdlgMain->m_stCurUser.m_strAuthority = (LPCTSTR)_bstr_t(vElement); OnOK(); } else { MessageBox(_T("密码错误")); } } 为了使按回车键和点击登录按钮的功能一样,添加如下代码: BOOL CLogInDlg::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 if(WM_KEYDOWN == pMsg->message) { if(VK_RETURN == pMsg->wParam) { OnClickedButtonLogin(); return FALSE; } } return CDialogEx::PreTranslateMessage(pMsg); } 打开数据库的代码如下: int CAdoDBControl::Open(BSTR ConnectionString, long Options ) { if( FAILED( m_pConnection.CreateInstance(__uuidof(Connection)) ) ) //初始化Connection指针 { return ADO_DB_CREATE_FAIL; } try { m_pConnection->Open(ConnectionString, "", "", Options); } catch(_com_error e) { AfxMessageBox(e.Description()); return ADO_DB_OPEN_FAIL; } return ADO_DB_SUCCESSFUL; } 运行函数时,故意将数据库配置写错,在填写完用户名和密码后点击登录按钮,那么约10秒以后,程序报错“[DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或拒绝访问。”,点击确定后,返回登录对话框。重复多次操作,依然如此。程序此时是正常的。 但是,如果在填写完用户名和密码后,用回车方式登录,此时依然报错“[DBNETLIB][ConnectionOpen (Connect()).]SQL Server不存在或拒绝访问。”,但是在点击 确定后,登录对话框会消失,并且弹出主界面,且主界面不响应鼠标点击任何按钮,且主界面不是我想要的主界面(比如正常登录的主界面是最大化的,而此时出现 的主界面不是最大化的),此问题100%复现。 请问各位达人,这是怎么回事?有何解决办法?
scrapy存到mysql查询无数据
## 1. 问题描述 尝试使用scrapy框架爬取网站,将爬取的数据存储到mysql数据库,执行完毕之后没有报错,但是我查询数据时,显示没有数据 (代码框架参考使用该博主代码尝试运行: https://www.cnblogs.com/fromlantianwei/p/10607956.html) ## 2. 部分截图 1. scrapy项目: ![图片说明](https://img-ask.csdn.net/upload/202003/04/1583310103_446281.png) 数据库创建: ![图片说明](https://img-ask.csdn.net/upload/202003/04/1583310345_774265.png) ##3. 相关代码 scrapy框架代码: (1)tencent爬虫文件 ``` # -*- coding: utf-8 -*- import scrapy from urllib import parse import re from copy import deepcopy from ScrapyPro3.items import ScrapyPro3Item class tencentSpider(scrapy.Spider): name = 'tencent' allowed_domains = [] start_urls = [ 'http://tieba.baidu.com/mo/q----,sz@320_240-1-3---2/m?kw=%E6%A1%82%E6%9E%97%E7%94%B5%E5%AD%90%E7%A7%91%E6%8A%80%E5%A4%A7%E5%AD%A6%E5%8C%97%E6%B5%B7%E6%A0%A1%E5%8C%BA&pn=26140', ] def parse(self, response): # 总页面 item = ScrapyPro3Item() all_elements = response.xpath(".//div[@class='i']") # print(all_elements) for all_element in all_elements: content = all_element.xpath("./a/text()").extract_first() content = "".join(content.split()) change = re.compile(r'[\d]+.') content = change.sub('', content) item['comment'] = content person = all_element.xpath("./p/text()").extract_first() person = "".join(person.split()) # 去掉点赞数 评论数 change2 = re.compile(r'点[\d]+回[\d]+') person = change2.sub('', person) # 选择日期 change3 = re.compile(r'[\d]?[\d]?-[\d][\d](?=)') date = change3.findall(person) # 如果为今天则选择时间 change4 = re.compile(r'[\d]?[\d]?:[\d][\d](?=)') time = change4.findall(person) person = change3.sub('', person) person = change4.sub('', person) if time == []: item['time'] = date else: item['time'] = time item['name'] = person # 增加密码 活跃 item['is_active'] = '1' item['password'] = '123456' print(item) yield item # 下一页 """next_url = 'http://tieba.baidu.com/mo/q----,sz@320_240-1-3---2/' + parse.unquote( response.xpath(".//div[@class='bc p']/a/@href").extract_first()) print(next_url) yield scrapy.Request( next_url, callback=self.parse, )""" ``` (2)item文件 ``` # -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentation in: # https://doc.scrapy.org/en/latest/topics/items.html import scrapy class ScrapyPro3Item(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() comment = scrapy.Field() time = scrapy.Field() name = scrapy.Field() password = scrapy.Field() is_active = scrapy.Field() ``` (3)pipelines文件 # -*- coding: utf-8 -*- # Define your item pipelines here # # Don't forget to add your pipeline to the ITEM_PIPELINES setting # See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html """class Scrapypro3Pipeline(object): def process_item(self, item, spider): return item""" import pymysql from twisted.enterprise import adbapi class Scrapypro3Pipeline(object): def __init__(self, dbpool): self.dbpool = dbpool @classmethod def from_settings(cls, settings): # 函数名固定,会被scrapy调用,直接可用settings的值 """ 数据库建立连接 :param settings: 配置参数 :return: 实例化参数 """ adbparams = dict( host='localhost', db='mu_ke', user='root', password='root', cursorclass=pymysql.cursors.DictCursor # 指定cursor类型 ) # 连接数据池ConnectionPool,使用pymysql或者Mysqldb连接 dbpool = adbapi.ConnectionPool('pymysql', **adbparams) # 返回实例化参数 return cls(dbpool) def process_item(self, item, spider): """ 使用twisted将MySQL插入变成异步执行。通过连接池执行具体的sql操作,返回一个对象 """ query = self.dbpool.runInteraction(self.do_insert, item) # 指定操作方法和操作数据 # 添加异常处理 query.addCallback(self.handle_error) # 处理异常 def do_insert(self, cursor, item): # 对数据库进行插入操作,并不需要commit,twisted会自动commit insert_sql = """ insert into login_person(name,password,is_active,comment,time) VALUES(%s,%s,%s,%s,%s) """ cursor.execute(insert_sql, (item['name'], item['password'], item['is_active'], item['comment'], item['time'])) def handle_error(self, failure): if failure: # 打印错误信息 print(failure)``` ``` (4) settings文件 ``` # -*- coding: utf-8 -*- # Scrapy settings for ScrapyPro3 project # # For simplicity, this file contains only settings considered important or # commonly used. You can find more settings consulting the documentation: # # https://doc.scrapy.org/en/latest/topics/settings.html # https://doc.scrapy.org/en/latest/topics/downloader-middleware.html # https://doc.scrapy.org/en/latest/topics/spider-middleware.html BOT_NAME = 'ScrapyPro3' SPIDER_MODULES = ['ScrapyPro3.spiders'] NEWSPIDER_MODULE = 'ScrapyPro3.spiders' # Crawl responsibly by identifying yourself (and your website) on the user-agent USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36' MYSQL_HOST = 'localhost' MYSQL_DBNAME = 'mu_ke' MYSQL_USER = 'root' MYSQL_PASSWD = 'root' # Obey robots.txt rules ROBOTSTXT_OBEY = False # Configure maximum concurrent requests performed by Scrapy (default: 16) #CONCURRENT_REQUESTS = 32 # Configure a delay for requests for the same website (default: 0) # See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay # See also autothrottle settings and docs #DOWNLOAD_DELAY = 3 # The download delay setting will honor only one of: #CONCURRENT_REQUESTS_PER_DOMAIN = 16 #CONCURRENT_REQUESTS_PER_IP = 16 # Disable cookies (enabled by default) #COOKIES_ENABLED = False # Disable Telnet Console (enabled by default) #TELNETCONSOLE_ENABLED = False # Override the default request headers: #DEFAULT_REQUEST_HEADERS = { # 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', # 'Accept-Language': 'en', #} # Enable or disable spider middlewares # See https://doc.scrapy.org/en/latest/topics/spider-middleware.html #SPIDER_MIDDLEWARES = { # 'ScrapyPro3.middlewares.ScrapyPro3SpiderMiddleware': 543, #} # Enable or disable downloader middlewares # See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html #DOWNLOADER_MIDDLEWARES = { # 'ScrapyPro3.middlewares.ScrapyPro3DownloaderMiddleware': 543, #} # Enable or disable extensions # See https://doc.scrapy.org/en/latest/topics/extensions.html #EXTENSIONS = { # 'scrapy.extensions.telnet.TelnetConsole': None, #} # Configure item pipelines # See https://doc.scrapy.org/en/latest/topics/item-pipeline.html ITEM_PIPELINES = { 'ScrapyPro3.pipelines.Scrapypro3Pipeline':200, } # Enable and configure the AutoThrottle extension (disabled by default) # See https://doc.scrapy.org/en/latest/topics/autothrottle.html #AUTOTHROTTLE_ENABLED = True # The initial download delay #AUTOTHROTTLE_START_DELAY = 5 # The maximum download delay to be set in case of high latencies #AUTOTHROTTLE_MAX_DELAY = 60 # The average number of requests Scrapy should be sending in parallel to # each remote server #AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0 # Enable showing throttling stats for every response received: #AUTOTHROTTLE_DEBUG = False # Enable and configure HTTP caching (disabled by default) # See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings #HTTPCACHE_ENABLED = True #HTTPCACHE_EXPIRATION_SECS = 0 #HTTPCACHE_DIR = 'httpcache' #HTTPCACHE_IGNORE_HTTP_CODES = [] #HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage' ``` (5)start文件——执行爬虫文件 ``` from scrapy import cmdline cmdline.execute(["scrapy","crawl","tencent"]) ``` 数据库创建代码: ``` create database mu_ke; CREATE TABLE `login_person` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(100) DEFAULT NULL, `passsword` varchar(100) DEFAULT NULL, `is_active` varchar(100) DEFAULT NULL, `comment` varchar(100) DEFAULT NULL, `time` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1181 DEFAULT CHARSET=utf8; select count(name) from login_person;#查询结果条数为0 ``` # 运行完代码后查询数据,显示条数为0,这里面有什么问题吗? (1) 执行过程正常 (2)运行 pycharm2019.3 python3.8 mysql8.0(workbench8.0) (3) 数据连接没有
帮忙检查一下哪有问题
using System; using System.Data; using System.Data.SqlClient; using System.IO; using System.Text; using System.Web; using System.Web.Configuration; /// <summary> /// DataClass 的摘要说明 /// </summary> public class DataClass { private SqlConnection GetSqlServerConn() { SqlConnection sqlConn; //定义SQL Server连接对象 string strConn = WebConfigurationManager.ConnectionStrings["ch21DataBase"].ConnectionString; //读取Web.config配置文件的ConnectionString节点获取连接字符串 sqlConn = new SqlConnection(strConn); //生成数据连接对象 sqlConn.Open(); //打开数据库连接 return sqlConn; //返回数据库连接对象以供调用 } private void CloseSqlServerConn(SqlConnection sqlConn) { if(sqlConn.State==ConnectionState.Open) //如果数据库连接处于关闭状态,则打开此连接 { sqlConn.Close(); } } public bool SaveFilesInfo(HttpFileCollection fileColl) { SqlConnection sqlConn; SqlCommand sqlComm; string strComm = @"insert into tabUploadFile(NewFileName,OldFileName,SaveAddress,UploadTime,TypeName) value(@NewFileName,@OldFileName,@SaveAddress,@UploadTime,@TypeName)"; sqlConn = GetSqlServerConn(); //调用方法获取数据库连接 SqlTransaction sqlTran = sqlConn.BeginTransaction(); //开始数据库事务 StringBuilder sbFileName; try { sqlComm = new SqlCommand(strComm, sqlConn); sqlComm.Transaction = sqlTran; //指定命令要使用的事务 for(int i=0;i<fileColl.Count;i++) //循环保存上传信息 { if(!String.IsNullOrEmpty(fileColl[i].FileName)) { sbFileName = new StringBuilder(); //使用年月日时分秒毫秒生成文件名 sbFileName.Append(DateTime.Now.Year); sbFileName.Append(DateTime.Now.Month); sbFileName.Append(DateTime.Now.Day); sbFileName.Append(DateTime.Now.Hour); sbFileName.Append(DateTime.Now.Minute); sbFileName.Append(DateTime.Now.Second); sbFileName.Append(DateTime.Now.Millisecond); sbFileName.Append(Path.GetExtension(fileColl[i].FileName)); sqlComm.Parameters.Clear(); //清空以前参数,指定当前SQL命令参数 sqlComm.Parameters.AddWithValue("@NewFileName", sbFileName.ToString()); sqlComm.Parameters.AddWithValue("@OldFileName", Path.GetFileName(fileColl[i].FileName)); sqlComm.Parameters.AddWithValue("@SaveAddress", System.Web.HttpContext.Current.Server.MapPath("~/Upload/")); sqlComm.Parameters.AddWithValue("@UploadTime", DateTime.Now); sqlComm.Parameters.AddWithValue("@TypeName", Path.GetExtension(fileColl[i].FileName)); sqlComm.ExecuteNonQuery(); //执行SQL命令 fileColl[i].SaveAs(System.Web.HttpContext.Current.Server.MapPath("~/Upload/") + sbFileName.ToString()); //保存对应的文件到服务器 } } sqlTran.Commit(); //提交事务保存数据 return true; } catch(Exception ex) { sqlTran.Rollback(); //发生异常回滚事务 CloseSqlServerConn(sqlConn); //关闭数据连接 return false; } } public DataTable GetFilesInfo() { SqlConnection sqlConn; SqlDataAdapter sqlAdpt; DataTable dtFilesInfo; string strComm = "select NewFileName,OldFileName,SaveAddress,UploadTime,TypeName from tabUploadFile"; try { sqlConn = GetSqlServerConn(); sqlAdpt = new SqlDataAdapter(strComm, sqlConn); //使用数据适配器读取数据 dtFilesInfo = new DataTable(); sqlAdpt.Fill(dtFilesInfo); //填充数据到DataTable return dtFilesInfo; } catch(Exception ex) { throw ex; } } public DataClass() { // // TODO: 在此处添加构造函数逻辑 // }
综合人事管理系统登录模块出现debug error
一个星期都没有解决,我都哭了,一个小项目就止步这了,请各位大神帮帮我吧..... ![图片说明](https://img-ask.csdn.net/upload/201610/08/1475891359_978636.png) ![怎么样都取消不了,帮帮忙啊](https://img-ask.csdn.net/upload/201610/08/1475891407_89270.png) //我也只能附加个大概,我百度云有完整代码http://pan.baidu.com/s/1jIg6DJg void CLoginDlg::OnOK() //这是登录模块 { // TODO: Add extra validation here CDialog::OnOK(); UpdateData(TRUE);//把对话框中的值传递到变量中 //检查数据有效性 if(m_username=="") { MessageBox("请输入用户名:"); return; } if(m_pwd=="") { MessageBox("请输入密码:"); return; } //定义CUsers对象,用于从数据库Users中读取数据 CUsers user; user.getdata(m_username);//从数据库读取到c++的类中 //如果读取的数据与用户输入数据不同则返回 if(user.getpwd()!=m_pwd) //getpwd从类中返回列中的值 { MessageBox("用户输入不正确!"); return; } CDialog::OnOK(); } CUsers::CUsers()//这是把users表封装成类 { username=""; pwd=""; user_type=0; } CString CUsers::getusername() //从类中返回username { return username; } CString CUsers::getpwd() { return pwd; } int CUsers::getuser_type() { return user_type; } void CUsers::set_username(CString cusername) { username=cusername; } void CUsers::set_pwd(int cpwd) { pwd=cpwd; } void CUsers::set_user_tupe(int cusertype) { user_type=cusertype; } void CUsers::getdata(CString cusername) //从数据库读取到c++【不能用cusername,因为是从数据库读】 { ADOConn m_adoconn; m_adoconn.OnInitDBConnect(); _bstr_t vSQL; vSQL="select *from users where username='cusername'";//字符串的sql语句 //执行select语句 _RecordsetPtr m_precordset; m_precordset=m_adoconn.GetRecordSet(vSQL); //返回结果集到m_precordset //返回各列的值 if(m_precordset->adoEOF==1) CUsers(); else { //atoi()把int改为CString username=(LPCTSTR)(_bstr_t)m_precordset->GetCollect("username"); //getcollect()从结果集中读取相应列的值,返回值为_variant_t型 pwd=(LPCTSTR)(_bstr_t)m_precordset->GetCollect("pwd"); user_type=atoi((LPCTSTR)(_bstr_t)m_precordset->GetCollect("user_type")); } //断开与数据库的链接 m_adoconn.ExitConnect(); } void CUsers::sql_insert() { ADOConn m_adoconn; m_adoconn.OnInitDBConnect(); //设置insert语句 //CString strWage; //strWage.Format("%f,Wage"); float转换为字符串形式 _bstr_t vSQL; vSQL="insert into users values(username,pwd,user_tupe))"; //执行insert语句 m_adoconn.ExecuteSQL(vSQL); //断开与数据库的链接 m_adoconn.ExitConnect(); } void CUsers::sql_update_pwd(CString cusername) { ADOConn m_adoconn; m_adoconn.OnInitDBConnect(); //设置insert语句 //CString strWage; //strWage.Format("%f,Wage"); float转换为字符串形式 _bstr_t vSQL; vSQL="updata users set pwd=pwd where username='cusername'"; //执行insert语句 m_adoconn.ExecuteSQL(vSQL); //断开与数据库的链接 m_adoconn.ExitConnect(); } void CUsers::sql_delete(CString cusername) { ADOConn m_adoconn; m_adoconn.OnInitDBConnect(); //设置insert语句 //CString strWage; //strWage.Format("%f,Wage"); float转换为字符串形式 _bstr_t vSQL; vSQL="delete from users where username='cusername'"; //执行insert语句 m_adoconn.ExecuteSQL(vSQL); //断开与数据库的链接 m_adoconn.ExitConnect(); } BOOL CFwzlDlg::OnInitDialog() //这是在主对话框初始化时候调用登录模块 { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here _variant_t vIndex; vIndex=long(0); m_datagrid.GetColumns().GetItem(vIndex).SetWidth(0); //_variant_t类型在 COMDEF.H中 vIndex=long(1); m_datagrid.GetColumns().GetItem(vIndex).SetWidth(80); vIndex=long(2); m_datagrid.GetColumns().GetItem(vIndex).SetWidth(40); vIndex=long(3); m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(4); m_datagrid.GetColumns().GetItem(vIndex).SetWidth(90); CLoginDlg dlg; extern CUsers curUser; //c++声明必须在前面 if(dlg.DoModal()!=IDOK) //domadal()函数返回对话框的传递的消息 OnOK(); else //读取用户信息到 全局类curUser对象 curUser.getdata(dlg.m_username); return TRUE; // return TRUE unless you set the focus to a control } void ADOConn::OnInitDBConnect() //以下是连接数据库的函数 { //初始化ole/com库环境,为访问ado接口做准备 ::CoInitialize(NULL); //I的大写,和l的小写尽然一样!!!!!!!!!!!!!!!!!!!!!!!! try { //创建Connection对象 m_pConnection.CreateInstance("ADODB.Connection"); //设置连接字符串,必须是BSTR型或者_bstr_t类型 _bstr_t strConnect="Provider=SQLOLEDB;Server=LIQI;Database=fwzl;uid=sa;pwd=qi7250831;"; m_pConnection->Open(strConnect,"","",adModeUnknown); } //捕捉异常 catch(_com_error e) { //显示错误信息 AfxMessageBox(e.Description()); } } _RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL) { try { //连接数据库,如果connection对象为空,则重新连接数据库 if(m_pConnection==NULL) OnInitDBConnect(); //创建记录集对象 m_pRecordset.CreateInstance(__uuidof(Recordset)); //用来获取 某种结构、接口及其指针、引用、变量 所关联的GUID,类似于某些语言中获取类型 typeof 这样的操作。 //取得表中的记录 m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);//源,activestring,游标类型,锁定类型,option(source参数的类型) } //捕捉异常 catch(_com_error e) { //显示出错信息 AfxMessageBox(e.Description()); } //返回结果集 return m_pRecordset; } BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL) { try { //是否已经连接数据库 if(m_pConnection==NULL) OnInitDBConnect(); m_pConnection->Execute(bstrSQL,NULL,adCmdText); return true; } catch(_com_error e) { AfxMessageBox(e.Description()); return false; } }//程序调用Connetion对象的Execute方法执行SQL语句,不返回结果集,如果执行成功,则返回true void ADOConn::ExitConnect() { //关闭记录集和连接 if(m_pRecordset!=NULL) m_pRecordset->Close(); m_pConnection->Close(); //释放环境 ::CoUninitialize(); //关闭ole/com数据库,释放资源 }
ext分页,后台如何处理?
我是根据查询条件从数据库中取出满足条件的数据,保存到list中,用了json-plugin插件,所以直接把从数据返回的List类型数据赋值给List类型的参数items直接传到前台gridpanel中的root接收。我现在想实现的是根据查询的结果进行分页显示,如图,我得到12条结果,我现在想每页显示5条,我现在不知道怎样根据start和limit参数来处理。在网上搜了很多,始终搞不清楚原理。 [color=red][size=medium]这里是grid定义[/size][/color] [code="java"] //定义数据集对象 var store = new Ext.data.Store({//配置分组数据集 baseParams : { infoLinkman :'' }, reader: new Ext.data.JsonReader({ totalRecords : "results", totalProperty: "results", root : "items", fields : [ {name: 'id'}, {name: 'infoType'}, {name: 'infoTitle'}, {name: 'infoContent'}, {name: 'infoLinkman'}, {name: 'infoPhone'}, {name: 'infoEmail'}, {name: 'infoDate'}, {name: 'infoState'}, {name: 'infoPayfor'} ] }), proxy : new Ext.data.HttpProxy({ url : 'ShowList.action' }) }); store.load({ params : { start : 0, limit : 5 } }); var sm = new Ext.grid.CheckboxSelectionModel(); var cm = new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(), sm, {header: "ID", width: 100, dataIndex: 'id', sortable: true}, {header: "信息类别", width: 100, dataIndex: 'infoType', sortable: true}, {header: "信息标题", width: 100, dataIndex: 'infoTitle', sortable: true}, {header: "信息内容", width: 100, dataIndex: 'infoContent', sortable: true}, {header: "联系人", width: 100, dataIndex: 'infoLinkman', sortable: true}, {header: "联系电话", width: 100, dataIndex: 'infoPhone', sortable: true}, {header: "E-mail地址", width: 100, dataIndex: 'infoEmail', sortable: true}, {header: "发布时间", width: 130, dataIndex: 'infoDate', sortable: true}, {header: "审核状态", width: 100, dataIndex: 'infoState', sortable: true}, {header: "付费状态", width: 100, dataIndex: 'infoPayfor', sortable: true}]); //创建Grid表格组件 var grid = new Ext.grid.GridPanel({ title : '列表', applyTo : 'grid-div', width:1200, height:400, frame:true, store : store, cm : cm, sm : sm, tbar : [{ xtype : 'tbtext', text : '联系人查询' }, { xtype : 'textfield', id : 'infoLinkman', emptyText : '联系人', width : 100 }, { xtype : 'button', text : '查询', handler:find }, '-', { xtype : 'button', text : '添加', handler:add }, '-', { xtype : 'button', text : '编辑', handler:update }, '-', { xtype : 'button', text : '删除', handler:remove }], bbar : new Ext.PagingToolbar({//分页工具栏 store : store, pageSize : 5, displayInfo : true, displayMsg : '第 {0} 条到 {1} 条,一共 {2} 条', emptyMsg : "没有记录" }) }); [/code] [color=red][size=medium]这里是查询函数[/size][/color] [code="java"] function find() { var store = new Ext.data.Store({//配置分组数据集 baseParams : { infoLinkman : Ext.getCmp('infoLinkman').getValue() }, reader: new Ext.data.JsonReader({ totalRecords : "results", root : "items", fields : [ {name: 'id'}, {name: 'infoType'}, {name: 'infoTitle'}, {name: 'infoContent'}, {name: 'infoLinkman'}, {name: 'infoPhone'}, {name: 'infoEmail'}, {name: 'infoDate'}, {name: 'infoState'}, {name: 'infoPayfor'} ] }), proxy : new Ext.data.HttpProxy({ url : 'ShowList.action' }) }); store.load({ params : { start : 0, limit : 5 } }); grid.reconfigure(store, cm); } [/code] [color=red][size=medium]这里是action[/size][/color] [code="java"] public class ShowListAction extends ActionSupport { private String infoLinkman; private long results; private List items; String start; String limit; public String execute() throws Exception{ this.results = 20; // int top1=Integer.parseInt(start); // int top2=Integer.parseInt(limit); Object[] params={infoLinkman}; String sql="SELECT * FROM tb_info WHERE (info_linkman=?) ORDER BY info_date ASC"; OpDB myOp=new OpDB(); System.out.println(infoLinkman); items=myOp.OpListShow(sql, params); return SUCCESS; } } [/code] [b]问题补充:[/b] 若后台是sql server 2000 sql语句该怎么写呢?好像用mysql的话这个问题比较好解决。还有我那个查询条件 联系人的参数我通过查询按钮在find方法里传过去,但我要点击下一页按钮的话文本框里的这个参数好像就传不过去了,每次传递的参数只是limit和start,这个查询条件参数带不过去。这个参数该怎么传递呢,在更新页码的时候? [b]问题补充:[/b] 现在就不处理吧,但是他也没有自动分页啊,12条数据他是全部显示出来了啊 [b]问题补充:[/b] [quote]来进行分页,不过要用两条select语句联合起来用[/quote] 比如总共12条数据,去6-10条,sql怎么写呢? [b]问题补充:[/b] [color=red][size=medium] 现在的问题是,我想根据查询条件得到结果,并将符合条件的结果条数动态的传给results。我在第一次显示gridpanel时它就调用了action,因为没有参数联系人参数传入,执行sql语句后满足条件的是0条,这时results值就被赋值0,因此页数就只有一页。此时我再点击查询按钮查询,可以得到第一页的前五条数据,但下面的分页按钮只有一页,无法点击下一页。<br> 第二个问题,即使现在可以点击下一页,那又怎样才能将我的查询条件这个参数带过去呢,不然返回的还是零条。<br> 第三个问题,即使现在点击第二页按钮时,可以返回第6-10条数据,但根据下面的摄sql语句,由于是用id进行分页的,而id是没有重复的,查询操作会直接前5条记录去除,从数据库的第6条开始查询满足条件的记录,而这必然会使第二页得到的内容会与第一页的内容有可能重复(若前5页没有符合条件的内容的话,第1页和第2页内容就会完全一样。)<br> [color=brown][/color] [/size][size=small]谢谢各位热心解答,问题讲得很啰嗦,不知道讲清楚没有,我基础不太好,这个问题搞了好久也没弄出个所以然来,实在不知道怎么办了。[/size][/color] [code="java"] public String execute() throws Exception{ int top1=Integer.parseInt(start); int top2=Integer.parseInt(limit); Object[] params={infoLinkman}; // String sql="SELECT * FROM tb_info WHERE (info_linkman=?) ORDER BY info_date ASC"; String sql = "select top "+top2+" * from tb_info where (info_linkman=?)and (id not in (select top "+top1+" id from tb_info order by id asc )) order by id asc"; // String sql = "select top 5 * from tb_info where (info_linkman=?)and (id not in (select top 10 id from tb_info order by id asc )) order by id asc"; OpDB myOp=new OpDB(); items=myOp.OpListShow(sql, params); String sql2="select count(*) count from tb_info where (info_linkman=?)"; results = myOp.getUserCount(sql2, params); // results=11; System.out.println("符合条件记录条数:"+results); System.out.println(infoLinkman); return SUCCESS; } [/code] [b]问题补充:[/b] 加上那段代码后提示[color=red]Ext.getCmp("infoLinkman") is undefined [/color] 其实就是想根据查询条件得到结果集合,但是如果数据量很大,就需要分页,现在这个分页很难实现吗,这个应该也是很常见的需求吧 [b]问题补充:[/b] [size=medium][color=red]奇怪,上次补充的问题不见了。前段时间网络一直不好。我把load和beforeload函数放到gridpanel定义后结果就正常了,不报错。 现在我把results定死,赋值为11,这样初始分页栏会显示有3页,第一页显示根据查询条件得到的5个结果,点击第二页时,从后台看,action可以得到查询参数并返回5条结果,但是gridpanel里的数据并没有更新,现在的问题是如何让gridpanel根据每次返回的数据动态更新表格。[/color][/size] [b]问题补充:[/b] [color=red][size=small]第一次默认返回数据为:{"[/[/size]color]infoLinkman":"","infoType":null,"items":[],"limit":"5","results":11,"start":"0"} [color=red][size=small]第二次根据查询数据得到数据为:{"[/[/size]color]infoLinkman":"鑺宠姵","infoType":null,"items":[{"[color=red]id[/color]":114,"infoContent":"姹傝喘淇℃伅鍐呭","infoDate":"2007-12-26 11:47:46","infoEmail":"888@89*.com","infoLinkman":"鑺宠姵","infoPayfor":"1","infoPhone":"13255******","infoState" :"1","infoTitle":"姹傝喘淇℃伅鏍囬","infoType":4},{"id":115,"infoContent":"鎷涘晢寮曡祫鍐呭","infoDate":"2007-12-26 11:51:54","infoEmail":"888@89*.com","infoLinkman":"鑺宠姵","infoPayfor":"1","infoPhone":"13255******","infoState" :"1","infoTitle":"鎷涘晢寮曡祫鏍囬","infoType":5},{"id":116,"infoContent":"鍏瘬淇℃伅鍐呭","infoDate":"2007-12-26 11:52:36","infoEmail":"888@89*.com","infoLinkman":"鑺宠姵","infoPayfor":"1","infoPhone":"13255******","infoState" :"1","infoTitle":"鍏瘬淇℃伅鏍囬","infoType":6},{"id":117,"infoContent":"姹傝亴淇℃伅鍐呭","infoDate":"2007-12-26 11:53:03","infoEmail":"888@89*.com","infoLinkman":"鑺宠姵","infoPayfor":"1","infoPhone":"13255******","infoState" :"1","infoTitle":"姹傝亴淇℃伅鏍囬","infoType":7},{"id":118,"infoContent":"瀹舵暀淇℃伅鍐呭","infoDate":"2007-12-26 11:53:40","infoEmail":"888@89*.com","infoLinkman":"鑺宠姵","infoPayfor":"1","infoPhone":"13255******","infoState" :"1","infoTitle":"瀹舵暀淇℃伅鏍囬","infoType":8}],"limit":"5","results":11,"start":"0"} [size=small][color=red]点击第二页后得到数据为:[/color][/size] {"infoLinkman":"鑺宠姵","infoType":null,"items":[{"[color=red]id[/color]":116,"infoContent":"鍏瘬淇℃伅鍐呭","infoDate":"2007-12-26 11:52:36","infoEmail":"888@89*.com","infoLinkman":"鑺宠姵","infoPayfor":"1","infoPhone":"13255******","infoState" :"1","infoTitle":"鍏瘬淇℃伅鏍囬","infoType":6},{"id":117,"infoContent":"姹傝亴淇℃伅鍐呭","infoDate":"2007-12-26 11:53:03","infoEmail":"888@89*.com","infoLinkman":"鑺宠姵","infoPayfor":"1","infoPhone":"13255******","infoState" :"1","infoTitle":"姹傝亴淇℃伅鏍囬","infoType":7},{"id":118,"infoContent":"瀹舵暀淇℃伅鍐呭","infoDate":"2007-12-26 11:53:40","infoEmail":"888@89*.com","infoLinkman":"鑺宠姵","infoPayfor":"1","infoPhone":"13255******","infoState" :"1","infoTitle":"瀹舵暀淇℃伅鏍囬","infoType":8},{"id":119,"infoContent":"杞﹁締淇℃伅鍐呭","infoDate":"2007-12-26 11:54:05","infoEmail":"888@89*.com","infoLinkman":"鑺宠姵","infoPayfor":"1","infoPhone":"13255******","infoState" :"1","infoTitle":"杞﹁締淇℃伅鏍囬","infoType":9},{"id":120,"infoContent":"鍑哄敭淇℃伅鍐呭","infoDate":"2007-12-26 11:54:41","infoEmail":"888@89*.com","infoLinkman":"鑺宠姵","infoPayfor":"1","infoPhone":"13255******","infoState" :"1","infoTitle":"鍑哄敭淇℃伅鏍囬","infoType":10}],"limit":"5","results":11,"start":"5"} [size=small][color=red]grid定义:[/color][/size] [code="java"]var grid = new Ext.grid.GridPanel({ title : '列表', applyTo : 'grid-div', width:1200, height:500, frame:true, store : store, cm : cm, sm : sm, tbar : [{ xtype : 'tbtext', text : '联系人查询' }, { xtype : 'textfield', id : 'infoLinkman', emptyText : '联系人', width : 100 }, { xtype : 'button', text : '查询', handler:find }, '-', { xtype : 'button', text : '添加', handler:add }, '-', { xtype : 'button', text : '编辑', handler:update }, '-', { xtype : 'button', text : '删除', handler:remove }], bbar : new Ext.PagingToolbar({//分页工具栏 store : store, pageSize : 5, displayInfo : true, displayMsg : '第 {0} 条到 {1} 条,一共 {2} 条', emptyMsg : "没有记录" }) }); store.on('beforeload', function() { //Ext.data.JsonStore读入数据之前的事件,让store在读入数据之前设置参数。 this.baseParams = { infoLinkman : Ext.getCmp('infoLinkman').getValue() }; }); store.load({ params : { start : 0, limit : 5 } }); grid.reconfigure(store, cm);[/code] [b]问题补充:[/b] 这句代码加不加都一样没反应 [b]问题补充:[/b] store内容怎么检查啊,不会啊 [b]问题补充:[/b] [size=medium][color=blue]这个问题先放一放了,以后再接着研究。谢谢所有热心的朋友。[/color][/size]
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
【资源】一个C/C++开发工程师的学习路线(已经无路可退,唯有逆风飞翔)【内附资源页】
声明: 1)该文章整理自网上的大牛和专家无私奉献的资料,具体引用的资料请看参考文献。 2)本文仅供学术交流,非商用。所以每一部分具体的参考资料并没有详细对应。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除。 3)博主才疏学浅,文中如有不当之处,请各位指出,共同进步,谢谢。 4)此属于第一版本,若有错误,还需继续修正与增删。还望大家多多指点。大家都共享一点点,一起为祖国科研的推进...
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
20道你必须要背会的微服务面试题,面试一定会被问到
写在前面: 在学习springcloud之前大家一定要先了解下,常见的面试题有那块,然后我们带着问题去学习这个微服务技术,那么就会更加理解springcloud技术。如果你已经学了springcloud,那么在准备面试的时候,一定要看看看这些面试题。 文章目录1、什么是微服务?2、微服务之间是如何通讯的?3、springcloud 与dubbo有哪些区别?4、请谈谈对SpringBoot 和S...
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
2020 年,大火的 Python 和 JavaScript 是否会被取而代之?
Python 和 JavaScript 是目前最火的两大编程语言,但是2020 年,什么编程语言将会取而代之呢? 作者 |Richard Kenneth Eng 译者 |明明如月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: Python 和 JavaScript 是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
神级宝库!GitHub 标星 1.2w+,Chrome 最天秀的插件都在这里啦!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个沉迷 Chrome 不能自拔的蒟蒻… 作为一个在远古时代用过什么 IE、360、猎豹等浏览器的资深器哥,当我第一次了解 Chrome 的时候,就被它的美貌给吸引住了… 就在我用了一段时间之后,我坚决的卸载了电脑上其它碍眼的浏览器,并觉得在之前的搬砖生涯中,我不配当哥,我只配是个沙雕… ...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
张朝阳回应迟到 1 分钟罚 500:资本家就得剥削员工
loonggg读完需要2分钟速读仅需 1 分钟大家我,我是你们的校长。前几天,搜狐的董事局主席兼 CEO 张朝阳和搜狐都上热搜了。原因很简单,就是搜狐出了“考勤新规”。一封搜狐对员工发布...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
为什么程序猿都不愿意去外包?
分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助
Java校招入职华为,半年后我跑路了
何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...
从顶级黑客到上市公司老板
一看标题,很多老读者就知道我在写什么了。今天Ucloud成功上市,季昕华成为我所熟悉的朋友里又双叒叕一个成功上市的案例。我们认识大概是十五年多吧,如果没记错,第一次见面应该是2004年,...
世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?
点击上方蓝字设为星标下面开始今天的学习~今天分享四个代码量很少,但很牛逼很经典的算法或项目案例。1、no code 项目地址:https://github.com/kelseyhight...
​两年前不知如何编写代码的我,现在是一名人工智能工程师
全文共3526字,预计学习时长11分钟 图源:Unsplash 经常有小伙伴私信给小芯,我没有编程基础,不会写代码,如何进入AI行业呢?还能赶上AI浪潮吗? 任何时候努力都不算晚。 下面,小芯就给大家讲一个朋友的真实故事,希望能给那些处于迷茫与徘徊中的小伙伴们一丝启发。(下文以第一人称叙述) 图源:Unsplash 正如Elsa所说,职业转换是...
立即提问